我有一个数组,每个包含的值都是另一个包含一个值的数组。我一直在寻找一种平整阵列并成功的方法,但不知何故,我有这种感觉,它可以做得更好。这是最好的方式还是可以改进?
<?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;
});
答案 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
循环可能会更快。这个匿名函数有一些开销,它确实表明你的数组得到的时间越长。
如果深度也是可变的,那么这是最快的遍历和展平方式。