PHP多维数组按键获取值

时间:2015-11-09 07:44:18

标签: php arrays multidimensional-array

我有一个多阵列,例如

$a = array(
  'key' => array(
    'sub_key' => 'val'
 ),
 'dif_key' => array(
   'key' => array(
     'sub_key' => 'val'
   )
 )
);

我拥有的真实数组相当大,键位于不同的位置。

我已经开始编写一堆嵌套的foreach和if / isset,但它不太正常,感觉有点“错误”。我对PHP非常熟悉,但对此有点困惑。

是否有内置函数或最佳实践方法,我可以根据键名访问所有值,无论它在何处。

E.g获取' sub_key'中的所有值无论阵列中的位置如何。

编辑:我现在看到的问题是我的" sub_key"是一个数组,因此不会按照此处的第一条评论http://php.net/manual/en/function.array-walk-recursive.php

包含在结果中

2 个答案:

答案 0 :(得分:3)

试试array_walk_recursive

$output = [];
array_walk_recursive($input, function ($value, $key) use (&$output) {
    if ($key === 'sub_key') {
        $output[] = $value;
    }
});

输出:

array (size=2)
  0 => string 'val' (length=3)
  1 => string 'val' (length=3)

答案 1 :(得分:0)

您可以执行类似

的操作
$a = [
  'key' => [
    'sub_key' => 'val'
  ],
 'dif_key' => [
   'key' => [
     'sub_key' => 'val'
   ]
 ]
];

$values = [];

array_walk_recursive($a, function($v, $k, $u) use (&$values){
    if($k == "sub_key") {
       $values[] = $v;
    }
},  $values );

print_r($values);

它是如何运作的?

array_walk_recursive()依次遍历数组的每个元素,您可以应用用户定义的函数。我创建了一个匿名函数并通过引用传递一个空数组。在这个匿名函数中,我检查元素键是否正确,如果是,则将元素添加到数组中。函数应用于每个元素后,每个键的值等于" sub_key"