Это проблема, у меня было много раз. В PHP нет простого способа сгладить массивы. Вы должны будете зациклить их, добавляя их в другой массив. В противном случае переосмыслите, как вы работаете с данными, чтобы использовать исходную структуру и не требовать сглаживания.
РЕДАКТИРОВАТЬ: Я решил добавить немного метрической информации, я создал массив $data = array(array('key' => value, 'value' => other_value), ...);
, где в моем массиве было 150 000 элементов. Я пробовал 3 типичных способа сплющивания
$start = microtime();
$values = array_map(function($ele){return $ele['key'];}, $data);
$end = microtime();
Производится время выполнения: Run Time: 0.304405
Выполнение 5 раз усредняет время чуть ниже 0,30
$start = microtime();
$values = array();
foreach ($data as $value) {
$values[] = $value['key'];
}
$end = microtime();
Производится время выполнения Run Time: 0.167301
со средним значением 0,165
$start = microtime();
$values = array();
for ($i = 0; $i < count($data); $i++) {
$values[] = $data[$i]['key'];
}
$end = microtime();
Производится время выполнения Run Time: 0.353524
со средним значением 0,355
В каждом случае использование foreach для массива данных было значительно быстрее. Вероятно, это связано с накладными расходами на выполнение функции для каждого элемента в массиве для реализации hte array_map()
.
Дальнейшее редактирование: я запустил это тестирование с предопределенной функцией. Ниже приведены средние числа за 10 итераций для «На лету» (определены в строке) и «Предварительно определены» (поиск строки).
Averages:
On the fly: 0.29714539051056
Pre Defined: 0.31916437149048