我面临一个多维数组过滤问题。假设我的数组中有超过 3 层或 50 层数组,我们如何基于键值对对它们进行过滤?
例如:
$arr = [
[ 'key' => 1, 'canView' => false, 'child' => [
['key'=> 10, 'canView' => true]
],
['key' => 2, 'canView' => false],
['key' => 3, 'canView' => true, 'child' => [
['key'=> 10, 'canView' => true, 'child' => [
['key'=> 10, 'canView' => true]] //and so on...
],...
],
['key' => 4, 'canView' => false],
['key' => 5, 'canView' => false],
];
然后,使用filterArray($array, $key, $condition)
过滤掉那些带有 的子元素和项目'canView' => false
。
上述示例的预期结果::
key 10
由于其父级key 1
具有而被删除'canView' => false
,并且所有其他的'canView'=>false
也将被删除,只保留它和其父级(如果有)都具有该'canView' => true
属性的那些。
我已经尝试过此代码,但它只能过滤第一级数组。
function filterArray($array, $key, $value)
{
foreach ($array as $subKey => $subArray) {
if ($subArray[$key] == $value) {
unset($array[$subKey]);
}
}
return $array;
}
我们如何将其转变为一个递归循环,自动检测是否存在另一个子数组?
为此,我建议您用
foreach ($array as $subKey => $subArray) {
给定的代码替换下面的代码。给定的代码将帮助您处理嵌套数组。要递归地处理数组,您可以对“子”键递归地调用自己的函数。