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
)