如何从关联数组中获取值数组?

时间:2010-03-18 22:41:20

标签: php

如何从关联数组中获取值数组?

关联数组示例:

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)

4 个答案:

答案 0 :(得分:8)

不确定它是否适合你,因为它只是PHP> = 5.3,但这是一个可能的解决方案,使用array_walk_recursive和一个闭包 (参见{{3 }})

$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在调用时通过参考{ - 1}}的方式工作:-(
(也许其他人有一个想法,关于如何做到这一点?)

答案 1 :(得分:1)

对每个单独的成员执行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 ) 

答案 2 :(得分:1)

在php 5.3下这应该非常好用且方便,因为array_reduce使用的数组元素被解释为 mixed 而不是固定为 integer

所以

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

我没有测试过它 - 没有5.3的副本 - 至少在理论中应该这样做。在< 5.3下,您将收到错误。

请注意,这只会合并顶级数组,与使用array_walk_recursive的解决方案不同。

答案 3 :(得分:1)

$flattened = call_user_func_array('array_merge', $array);