PHP: преобразовать массив в индексированный массив - PullRequest
0 голосов
/ 05 марта 2019

Учитывая, что у меня есть простой неассоциативный массив $values из SomeObject элементов, проиндексированных на 0, 1, 2 и т. Д.

Каков наилучший синтаксис для построения ассоциативного массива $valuesByIndex, проиндексированный некоторым значением, извлеченным из исходных элементов?

То, что я построил, это:

$key = function($val) {
   return $val->getSomeProperty();
};
$valuesByIndex = array_combine(array_map($key, $values), $values);

Что довольно равно:

$key = function($val) {
   return $val->getSomeProperty();
};

$valuesByIndex = [];
foreach ($values as $val) {
    $valuesByIndex[$key($val)] = $val;
}

Ищем довольно компактный синтаксис.

1 Ответ

0 голосов
/ 05 марта 2019

В этом фрагменте:

$key = function($val) {
   return $val->getSomeProperty();
};

$valuesByIndex = [];
foreach ($values as $val) {
    $valuesByIndex[$key($val)] = $val;
}

Мы можем просто заменить $key($val) содержимым функции $val->getSomeProperty(), что дает нам

$valuesByIndex = [];
foreach ($values as $val) $valuesByIndex[$val->getSomeProperty()] = $val;

Потому что, если функция возвращает это$val->getSomeProperty() мы можем просто поставить его прямо там и полностью отказаться от этой функции.

Однако, если это от вызова DB, вы можете использовать (в PDO) PDO::FETCH_GROUP, который принимает первый столбецSelect и делает его клавишей верхнего уровня.

...