Php 如何向新数组添加子值?

Php 如何向新数组添加子值?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个数组,其中每个包含的值都是另一个数组中的一个值。我一直在寻找一种使阵列平坦化的方法,并取得了成功,但不知何故,我觉得可以做得更好。这是最好的方法还是仍然可以改进 <?php $array = array( '1' => array('id' => '123'), '2' => array('id' => '22'), '3' => array('id' => '133'), '4' => array('id

我有一个数组,其中每个包含的值都是另一个数组中的一个值。我一直在寻找一种使阵列平坦化的方法,并取得了成功,但不知何故,我觉得可以做得更好。这是最好的方法还是仍然可以改进

<?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;
});

如果深度永远不会改变,
foreach
循环可能会更快。这个匿名函数有一些开销,它确实显示了数组的时间越长


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

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

$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'];
}

您可以使用以下功能实现这一点:

$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);
您可以在使用解包传递的数组时使用,并获取结果的第一个元素:

$result = array_map(null, ...$array)[0];
另一个选项是使用它从给定多维数组的单个列创建数组-将数组和列键馈送给它,例如:

$result = array_column($array, 'id');
以下任一项的输出:

print_r($result);

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