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

6

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

关联数组示例:

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个回答

8

不确定这是否适合您,因为它仅支持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来使其工作 :-(
(也许其他人有想法,如何解决这个问题?)


尽管我有一个不使用闭包的答案,但这是我最初想到的方法。当PHP5.3变得更加普遍时,回答PHP问题将会更有趣。 - Yacoby
@Yacoby:PHP 5.3 赢了!(匿名函数和闭包是我真的很想在工作中使用的东西...但我们正在使用 PHP 5.2;-() - Pascal MARTIN

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 ) 

1
在 PHP 5.3 下,这将非常方便,因为 array_reduce 使用的数组元素被解释为 mixed 而不是固定的 integer。因此,
print_r(array_reduce($test, 'array_merge'))

我还没有测试过它 -- 没有5.3的副本 -- 至少在理论上应该可以。在<5.3下,你会得到错误。

请注意,这仅合并数组的顶层,不像使用array_walk_recursive的解决方案。


1
注意到array_reduce的最近更改是个好习惯。但是,你需要提供一个初始数组来开始操作。array_reduce($aNestedArray, 'array_merge', array()) - goat

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接