我有一个多阵列,例如
$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
包含在结果中答案 0 :(得分:3)
$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"