Работа с массивами и объектами при помощи встроенных хелперов Yii2 — одно удовольствие. Сегодня рассмотрим, как можно удобно получать данные с массивов или объектов, при помощи ArrayHelper.
Рассмотрите следующий код:
class Auto { public $firm = 'Renault'; } $array = [ 'foo' => [ 'bar' => new Auto(), ] ]; $value = isset($array['foo']['bar']->firm) ? $array['foo']['bar']->firm : null;
Видите, последняя строчка выглядит достаточно громоздко, при этом выполняя, в принципе, простые действия.
Теперь посмотрите на метод, который предлагает хелпер ArrayHelper.
$value = ArrayHelper::getValue($array, 'foo.bar.firm');
Упрощение на лицо. Метод getValue() может принимать следующие параметры:
— массив (объект), с которого будет извлекаться
— метод определяющий способ получения данных с массива:
— ключ массива, который следует вернуть
— путь к целевому значению (разделен точками), как в примере выше
— callback-функция, возвращающая значение.
Пример callback-функции:
$autoName = ArrayHelper::getValue($auto, function ($auto, $defaultValue) { return $auto->firm . ' ' . $auto->model; });
Метод возвращает два значения, при этом это происходит в одну строку, что существенно сокращает код.
— параметр по умолчанию, на случай если значение не будет получено. Параметр не обязателен и по умолчанию равен null.
Если Вам нужно получить элемент и сразу же удалить его с массива — воспользуйтесь методом remove.
$array = ['a' => 'AAA', 'b' => [1, 2]]; $a = ArrayHelper::remove($array, 'a');
После этого в переменной $a будет значение ‘AAA’, а в массиве $array — [ ‘b’ => [1, 2]].