Commit 60ef8667 by pana1990

Add syntax highlighting [skip ci]

parent 9271c040
...@@ -3,14 +3,14 @@ ArrayHelper ...@@ -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'); ...@@ -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'); ...@@ -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'); ...@@ -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) { ...@@ -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 ...@@ -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) { ...@@ -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'); ...@@ -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) { ...@@ -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); ...@@ -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); ...@@ -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, [ ...@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment