mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-03 13:58:55 +08:00
Add syntax highlighting [skip ci]
This commit is contained in:
@ -3,14 +3,14 @@ ArrayHelper
|
|||||||
|
|
||||||
Additionally to [rich set of PHP array functions](http://php.net/manual/en/book.array.php) Yii array helper provides
|
Additionally to [rich set of PHP array functions](http://php.net/manual/en/book.array.php) Yii array helper provides
|
||||||
extra static methods allowing you to deal with arrays more efficiently.
|
extra static methods allowing you to deal with arrays more efficiently.
|
||||||
|
|
||||||
|
|
||||||
## Getting Values <a name="getting-values"></a>
|
## Getting Values <a name="getting-values"></a>
|
||||||
|
|
||||||
Retrieving values from an array, an object or a complex structure consisting of both using standard PHP is quite
|
Retrieving values from an array, an object or a complex structure consisting of both using standard PHP is quite
|
||||||
repetitive. You have to check if key exists with `isset` first, then if it does you're getting it, if not,
|
repetitive. You have to check if key exists with `isset` first, then if it does you're getting it, if not,
|
||||||
providing default value:
|
providing default value:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
class User
|
class User
|
||||||
{
|
{
|
||||||
@ -34,9 +34,9 @@ $value = ArrayHelper::getValue($array, 'foo.bar.name');
|
|||||||
|
|
||||||
First method argument is where we're getting value from. Second argument specifies how to get the data. It could be one
|
First method argument is where we're getting value from. Second argument specifies how to get the data. It could be one
|
||||||
of the following:
|
of the following:
|
||||||
|
|
||||||
- Name of array key or object property to retrieve value from.
|
- Name of array key or object property to retrieve value from.
|
||||||
- Set of dot separated array keys or object property names. The one we've used in the example above.
|
- Set of dot separated array keys or object property names. The one we've used in the example above.
|
||||||
- A callback returning a value.
|
- A callback returning a value.
|
||||||
|
|
||||||
The callback should be the following:
|
The callback should be the following:
|
||||||
@ -54,7 +54,7 @@ $username = ArrayHelper::getValue($comment, 'user.username', 'Unknown');
|
|||||||
```
|
```
|
||||||
|
|
||||||
In case you want to get the value and then immediately remove it from array you can use `remove` method:
|
In case you want to get the value and then immediately remove it from array you can use `remove` method:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$array = ['type' => 'A', 'options' => [1, 2]];
|
$array = ['type' => 'A', 'options' => [1, 2]];
|
||||||
$type = ArrayHelper::remove($array, 'type');
|
$type = ArrayHelper::remove($array, 'type');
|
||||||
@ -96,7 +96,7 @@ $ids = ArrayHelper::getColumn($array, 'id');
|
|||||||
```
|
```
|
||||||
|
|
||||||
The result will be `['123', '345']`.
|
The result will be `['123', '345']`.
|
||||||
|
|
||||||
If additional transformations are required or the way of getting value is complex, second argument could be specified
|
If additional transformations are required or the way of getting value is complex, second argument could be specified
|
||||||
as an anonymous function:
|
as an anonymous function:
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ $result = ArrayHelper::getColumn($array, function ($element) {
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Re-indexing Arrays <a name="reindexing-arrays"></a>
|
## Re-indexing Arrays <a name="reindexing-arrays"></a>
|
||||||
|
|
||||||
In order to index an array according to a specified key, the `index` method can be used. The input array should be
|
In order to index an array according to a specified key, the `index` method can be used. The input array should be
|
||||||
@ -114,7 +114,7 @@ multidimensional or an array of objects. The key can be a key name of the sub-ar
|
|||||||
an anonymous function which returns the key value given an array element.
|
an anonymous function which returns the key value given an array element.
|
||||||
|
|
||||||
If a key value is null, the corresponding array element will be discarded and not put in the result. For example,
|
If a key value is null, the corresponding array element will be discarded and not put in the result. For example,
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$array = [
|
$array = [
|
||||||
['id' => '123', 'data' => 'abc'],
|
['id' => '123', 'data' => 'abc'],
|
||||||
@ -133,13 +133,13 @@ $result = ArrayHelper::index($array, function ($element) {
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Building Maps <a name="building-maps"></a>
|
## Building Maps <a name="building-maps"></a>
|
||||||
|
|
||||||
In order to build a map (key-value pairs) from a multidimensional array or an array of objects you can use `map` method.
|
In order to build a map (key-value pairs) from a multidimensional array or an array of objects you can use `map` method.
|
||||||
The `$from` and `$to` parameters specify the key names or property names to set up the map. Optionally, one can further
|
The `$from` and `$to` parameters specify the key names or property names to set up the map. Optionally, one can further
|
||||||
group the map according to a grouping field `$group`. For example,
|
group the map according to a grouping field `$group`. For example,
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$array = [
|
$array = [
|
||||||
['id' => '123', 'name' => 'aaa', 'class' => 'x'],
|
['id' => '123', 'name' => 'aaa', 'class' => 'x'],
|
||||||
@ -167,9 +167,9 @@ $result = ArrayHelper::map($array, 'id', 'name', 'class');
|
|||||||
// ],
|
// ],
|
||||||
// ]
|
// ]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Multidimensional Sorting <a name="multidimensional-sorting"></a>
|
## Multidimensional Sorting <a name="multidimensional-sorting"></a>
|
||||||
|
|
||||||
`multisort` method helps to sort an array of objects or nested arrays by one or several keys. For example,
|
`multisort` method helps to sort an array of objects or nested arrays by one or several keys. For example,
|
||||||
|
|
||||||
@ -200,19 +200,19 @@ ArrayHelper::multisort($data, function($item) {
|
|||||||
return isset($item['age']) ? ['age', 'name'] : 'name';
|
return isset($item['age']) ? ['age', 'name'] : 'name';
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
Third argument is direction. In case of sorting by a single key it could be either `SORT_ASC` or
|
Third argument is direction. In case of sorting by a single key it could be either `SORT_ASC` or
|
||||||
`SORT_DESC`. If sorting by multiple values you can sort each value differently by providing an array of
|
`SORT_DESC`. If sorting by multiple values you can sort each value differently by providing an array of
|
||||||
sort direction.
|
sort direction.
|
||||||
|
|
||||||
Last argument is PHP sort flag that could take the same values as the ones passed to
|
Last argument is PHP sort flag that could take the same values as the ones passed to
|
||||||
PHP [sort()](http://php.net/manual/en/function.sort.php).
|
PHP [sort()](http://php.net/manual/en/function.sort.php).
|
||||||
|
|
||||||
|
|
||||||
## Detecting Array Types <a name="detecting-array-types"></a>
|
## Detecting Array Types <a name="detecting-array-types"></a>
|
||||||
|
|
||||||
It is handy to know whether an array is indexed or an associative. Here's an example:
|
It is handy to know whether an array is indexed or an associative. Here's an example:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// no keys specified
|
// no keys specified
|
||||||
$indexed = ['Qiang', 'Paul'];
|
$indexed = ['Qiang', 'Paul'];
|
||||||
@ -222,7 +222,7 @@ echo ArrayHelper::isIndexed($indexed);
|
|||||||
$associative = ['framework' => 'Yii', 'version' => '2.0'];
|
$associative = ['framework' => 'Yii', 'version' => '2.0'];
|
||||||
echo ArrayHelper::isAssociative($associative);
|
echo ArrayHelper::isAssociative($associative);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## HTML Encoding and Decoding Values <a name="html-encoding-values"></a>
|
## HTML Encoding and Decoding Values <a name="html-encoding-values"></a>
|
||||||
|
|
||||||
@ -235,26 +235,28 @@ $decoded = ArrayHelper::htmlDecode($data);
|
|||||||
|
|
||||||
Only values will be encoded by default. By passing second argument as `false` you can encode array's keys as well.
|
Only values will be encoded by default. By passing second argument as `false` you can encode array's keys as well.
|
||||||
Encoding will use application charset and could be changed via third argument.
|
Encoding will use application charset and could be changed via third argument.
|
||||||
|
|
||||||
|
|
||||||
## Merging Arrays <a name="merging-arrays"></a>
|
## Merging Arrays <a name="merging-arrays"></a>
|
||||||
|
|
||||||
|
```php
|
||||||
/**
|
/**
|
||||||
* Merges two or more arrays into one recursively.
|
* Merges two or more arrays into one recursively.
|
||||||
* If each array has an element with the same string key value, the latter
|
* If each array has an element with the same string key value, the latter
|
||||||
* will overwrite the former (different from array_merge_recursive).
|
* will overwrite the former (different from array_merge_recursive).
|
||||||
* Recursive merging will be conducted if both arrays have an element of array
|
* Recursive merging will be conducted if both arrays have an element of array
|
||||||
* type and are having the same key.
|
* type and are having the same key.
|
||||||
* For integer-keyed elements, the elements from the latter array will
|
* For integer-keyed elements, the elements from the latter array will
|
||||||
* be appended to the former array.
|
* be appended to the former array.
|
||||||
* @param array $a array to be merged to
|
* @param array $a array to be merged to
|
||||||
* @param array $b array to be merged from. You can specify additional
|
* @param array $b array to be merged from. You can specify additional
|
||||||
* arrays via third argument, fourth argument etc.
|
* arrays via third argument, fourth argument etc.
|
||||||
* @return array the merged array (the original arrays are not changed.)
|
* @return array the merged array (the original arrays are not changed.)
|
||||||
*/
|
*/
|
||||||
public static function merge($a, $b)
|
public static function merge($a, $b)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Converting Objects to Arrays <a name="converting-objects-to-arrays"></a>
|
## Converting Objects to Arrays <a name="converting-objects-to-arrays"></a>
|
||||||
|
|
||||||
Often you need to convert an object or an array of objects into an array. The most common case is converting active record
|
Often you need to convert an object or an array of objects into an array. The most common case is converting active record
|
||||||
@ -276,18 +278,18 @@ $data = ArrayHelper::toArray($post, [
|
|||||||
]);
|
]);
|
||||||
```
|
```
|
||||||
|
|
||||||
The first argument contains the data we want to convert. In our case we're converting a `Post` AR model.
|
The first argument contains the data we want to convert. In our case we're converting a `Post` AR model.
|
||||||
|
|
||||||
The second argument is conversion mapping per class. We're setting a mapping for `Post` model.
|
The second argument is conversion mapping per class. We're setting a mapping for `Post` model.
|
||||||
Each mapping array contains a set of mappings. Each mapping could be:
|
Each mapping array contains a set of mappings. Each mapping could be:
|
||||||
|
|
||||||
- A field name to include as is.
|
- A field name to include as is.
|
||||||
- A key-value pair of desired array key name and model column name to take value from.
|
- A key-value pair of desired array key name and model column name to take value from.
|
||||||
- A key-value pair of desired array key name and a callback which returns value.
|
- A key-value pair of desired array key name and a callback which returns value.
|
||||||
|
|
||||||
The result of conversion above will be:
|
The result of conversion above will be:
|
||||||
|
|
||||||
|
|
||||||
```php
|
```php
|
||||||
[
|
[
|
||||||
'id' => 123,
|
'id' => 123,
|
||||||
|
|||||||
Reference in New Issue
Block a user