如何从具有嵌套键的多维中获取列
我有一个多维的数组。我必须将一个键作为列拉,但它是嵌套的。就像对象访问如何用最少的代码行或优化来实现这一点。
阵列
$array = [
[
'price' => [
'cost' => 200, 'tax' => 10, 'total' => 210
],
'otherKey' => 'etc'
],
[
'price' => [
'cost' => 500, 'tax' => 50, 'total' => 550
],
'otherKey' => 'etc'
],
[
'price' => [
'cost' => 600, 'tax' => 60, 'total' => 660
],
'otherKey' => 'etc'
],
];
因为这可以通过foreach
,array_map()
和array_column()
我做到了。
使用array_column()
$result = array_column(array_column($array, 'price'), 'total');
printf($result);
在上面我必须使用array_column()
两次,我不想使用
使用foreach
$result = [];
foreach ($array as $value) {
$result[] = $value['price']['total'];
}
printf($result);
这种方法很好但是有更好的方法。
有什么办法可以在array_column()
中指定嵌套密钥,如
array_column($array, 'price.total'); // something like this
结果
array: [
0 => 210
1 => 550
2 => 660
]
我已经搜索过但无法找到这样的问题,就像我问的那样。
先谢谢。
答案 0 :(得分:1)
简单foreach
应该完成这项工作,你也可以编写一个函数,它接受一个字符串作为输入,拆分它并从数组中检索值。
答案 1 :(得分:1)
foreach
是更好的方法,即使你可以做一个你可以有想法的性能基准。
答案 2 :(得分:0)
在以下情况下可能更理想的另一种选择:
是使用 array_walk_recursive()
。它只会访问“叶节点”,因此您无需检查元素是否为数组。
以这种方式使用时,输出将是一个扁平的数组。
代码:(Demo)
$totals = [];
array_walk_recursive(
$array,
function($leafNode, $key) use(&$totals) {
if ($key === 'total') {
$totals[] = $leafNode;
}
}
);
var_export($totals);
输出:
array (
0 => 210,
1 => 550,
2 => 660,
)