Как получить массив значений из ассоциативных массивов?

Как я могу получить массив значений из ассоциативного массива?

Ассоциированный массив Пример:

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) 

Solutions Collecting From Web of "Как получить массив значений из ассоциативных массивов?"

Не уверен, что это вам подойдет, поскольку это только 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);