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

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

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

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)
6
задан Rachel 18 March 2010 в 22:41
поделиться

4 ответа

Не уверен, что это вам подойдет, так как это 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 по ссылке во время вызова :-(
(Может быть, у кого-то есть идея, как это сделать?)

8
ответ дан 9 December 2019 в 22:32
поделиться

Выполните 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 ) 
1
ответ дан 9 December 2019 в 22:32
поделиться

в php 5.3 это должно быть действительно красиво и удобно, потому что элементы массива, используемые array_reduce, интерпретируются как смешанный , а не фиксированный как целое число

так что

print_r(array_reduce($test, 'array_merge'))

я не тестировал его - нет копии 5.3 - по крайней мере, в теории , которая должна это делать. В <5.3 вы получите ошибки.

Обратите внимание, что это объединяет только верхний уровень массива, в отличие от решения с использованием array_walk_recursive.

1
ответ дан 9 December 2019 в 22:32
поделиться
$flattened = call_user_func_array('array_merge', $array);
1
ответ дан 9 December 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: