如何将子值添加到新数组?

时间:2014-10-23 13:48:18

标签: php arrays multidimensional-array

我有一个数组,每个包含的值都是另一个包含一个值的数组。我一直在寻找一种平整阵列并成功的方法,但不知何故,我有这种感觉,它可以做得更好。这是最好的方式还是可以改进?

<?php

$array = array(
    '1' => array('id' => '123'),
    '2' => array('id' => '22'),
    '3' => array('id' => '133'),
    '4' => array('id' => '143'),
    '5' => array('id' => '153'),
);

array_walk_recursive($array, function($v, $k) use (&$result) {
    $result[] = $v;
});

4 个答案:

答案 0 :(得分:5)

您可以使用array_map功能实现:

$func = function($value) {
    return $value['id'];
};
$array2 = array_map($func, $array);

或者如果你想将它保持在一行中:

 $array2 = array_map(function($value) { return $value['id']; }, $array);

这会使数组变平并保留初始键:

    array(5) {
      [1]=>
          string(3) "123"
      [2]=>
          string(2) "22"
      [3]=>
          string(3) "133"
      [4]=>
          string(3) "143"
      [5]=>
          string(3) "153"
    }

如果您不想保留密钥,请在结尾处拨打以下电话:

$array2 = array_values($array2);

答案 1 :(得分:1)

这就是我要做的。它的清洁:

$array = array(
    '1' => array('id' => '123'),
    '2' => array('id' => '22'),
    '3' => array('id' => '133'),
    '4' => array('id' => '143'),
    '5' => array('id' => '153'),
);
foreach($array as $key => $arr){
    $result[] = $arr['id'];
}

答案 2 :(得分:1)

您可以在使用array_map()解压缩传递的数组时使用passing null as the first argument splat operator并获取结果的第一个元素:

$result = array_map(null, ...$array)[0];

另一种选择是使用array_column()从给定多维数组的单个列创建数组 - 将数据和列键提供给它:例如:

$result = array_column($array, 'id');

输出:

print_r($result);

Array
(
    [0] => 123
    [1] => 22
    [2] => 133
    [3] => 143
    [4] => 153
)

答案 3 :(得分:0)

如果深度不会改变,foreach循环可能会更快。这个匿名函数有一些开销,它确实表明你的数组得到的时间越长。

如果深度也是可变的,那么这是最快的遍历和展平方式。