如何使用嵌套键从多维中获取列

时间:2017-09-18 08:43:43

标签: php arrays multidimensional-array

如何从具有嵌套键的多维中获取列

我有一个多维的数组。我必须将一个键作为列拉,但它是嵌套的。就像对象访问如何用最少的代码行或优化来实现这一点。

阵列

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

因为这可以通过foreacharray_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
]

我已经搜索过但无法找到这样的问题,就像我问的那样。

先谢谢。

3 个答案:

答案 0 :(得分:1)

简单foreach应该完成这项工作,你也可以编写一个函数,它接受一个字符串作为输入,拆分它并从数组中检索值。

答案 1 :(得分:1)

foreach是更好的方法,即使你可以做一个你可以有想法的性能基准。

答案 2 :(得分:0)

在以下情况下可能更理想的另一种选择:

  1. 数组结构变得有点复杂和
  2. 只要您尝试访问的键对于您尝试定位的值是唯一的

是使用 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,
)