|
|
|
@ -69,4 +69,52 @@ class ArrayHelper extends \yii\base\Component
|
|
|
|
|
{ |
|
|
|
|
return isset($array[$key]) || array_key_exists($key, $array) ? $array[$key] : $default; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Converts an array such that it is indexed by the specified column values or anonymous function results. |
|
|
|
|
* This method should be used only for two or higher dimensional arrays. |
|
|
|
|
* For example, |
|
|
|
|
* |
|
|
|
|
* ~~~ |
|
|
|
|
* $array = array( |
|
|
|
|
* array('id' => '123', 'data' => 'abc'), |
|
|
|
|
* array('id' => '345', 'data' => 'def'), |
|
|
|
|
* ); |
|
|
|
|
* $result = ArrayHelper::index($array, 'id'); |
|
|
|
|
* // the result is: |
|
|
|
|
* // array( |
|
|
|
|
* // '123' => array('id' => '123', 'data' => 'abc'), |
|
|
|
|
* // '345' => array('id' => '123', 'data' => 'abc'), |
|
|
|
|
* // ) |
|
|
|
|
* |
|
|
|
|
* // using anonymous function |
|
|
|
|
* $result = ArrayHelper::index($array, function(element) { |
|
|
|
|
* return $element['id']; |
|
|
|
|
* }); |
|
|
|
|
* |
|
|
|
|
* Note that if an index value is null, it will NOT be added to the resulting array. |
|
|
|
|
* |
|
|
|
|
* @param array $array the multidimensional array that needs to be indexed |
|
|
|
|
* @param mixed $key the column name or anonymous function whose result will be used to index the array |
|
|
|
|
* @return array the indexed array (the input array will be kept intact.) |
|
|
|
|
*/ |
|
|
|
|
public static function index($array, $key) |
|
|
|
|
{ |
|
|
|
|
$result = array(); |
|
|
|
|
if ($key instanceof \Closure) { |
|
|
|
|
foreach ($array as $element) { |
|
|
|
|
$key = call_user_func($key, $element); |
|
|
|
|
if ($key !== null) { |
|
|
|
|
$result[$key] = $element; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
foreach ($array as $element) { |
|
|
|
|
if (isset($element[$key]) && $element[$key] !== null) { |
|
|
|
|
$result[$element[$key]] = $element; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return $result; |
|
|
|
|
} |
|
|
|
|
} |