Как я могу получить массив значений из ассоциативного массива?
Ассоциированный массив Пример:
Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => Array ( [0] => 4 [1] => 5 [2] => 6 ) [2] => Array ( [0] => 7 ) )
Желаемый результат
Array (1,2,3,4,5,6,7)
Не уверен, что это вам подойдет, поскольку это только PHP> = 5.3, но вот возможное решение, используя array_walk_recursive
и закрытие (см. Анонимные функции ) :
$array = array( array(1, 2, 3), array(4, 5, 6), array(7), ); $result = array(); array_walk_recursive($array, function ($value, $key) use (& $result) { $result[] = $value; }); var_dump($result);
И результат:
array 0 => int 1 1 => int 2 2 => int 3 3 => int 4 4 => int 5 5 => int 6 6 => int 7
В принципе, закрытие – единственный способ заставить меня работать: он используется для импорта переменной $result
по ссылке в анонимную функцию.
И, просто, чтобы опубликовать его, только я получил это работает для PHP 5.2 (то есть не использует закрытие) заключается в следующем:
$result = array(); array_walk_recursive($array, 'my_func', & $result); var_dump($result); function my_func($value, $key, & $result) { $result[] = $value; }
Что тоже работает, но вызывает предупреждение:
Deprecated: Call-time pass-by-reference has been deprecated
К сожалению, я не нашел способ заставить это работать, не передавая $result
по ссылке во время вызова 🙁
(Может быть, у кого-то есть идея, как это сделать?)
Сделайте array_merge () для каждого отдельного элемента.
$test = Array ( "0" => Array ( 0 => 1, 1 => 2, 2 => 3, ), "1" => Array ( 0 => 4, 1 => 5, 2 => 6, ), "2" => Array ( 0 => 7, ) ); print_r(array_merge($test[0],$test[1],$test[2])); // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 )
в php 5.3 это должно быть действительно хорошо и удобно, потому что элементы массива, используемые array_reduce, интерпретируются как смешанные, а не фиксированные как целочисленные
так
print_r(array_reduce($test, 'array_merge'))
Я не тестировал его – нет копии 5.3 – по крайней мере теоретически, что это нужно делать. В разделе <5.3 вы получите ошибки.
Обратите внимание, что это только сливает верхний уровень массива, в отличие от решения, используя array_walk_recursive.
$flattened = call_user_func_array('array_merge', $array);