遍历多维数组并取消设置匹配项
Loop through multidimensional array and unset matching items
我有一个多维数组,我想遍历每个级别的每个项目并删除 'children' 和 'attribute_id' 均为空的任何项目(在本例中,最后 2 个项目带有56 和 70 键)。
Array
(
[11] => Array
(
[page_id] => 11
[page_parent_id] => 0
[attribute_id] => 8
[children] => Array
(
)
)
[12] => Array
(
[page_id] => 12
[page_parent_id] => 0
[attribute_id] =>
[children] => Array
(
[49] => Array
(
[page_id] => 49
[page_parent_id] => 12
[attribute_id] =>
[children] => Array
(
[50] => Array
(
[page_id] => 50
[page_parent_id] => 49
[attribute_id] => 32
[children] => Array
(
)
)
)
)
)
)
[13] => Array
(
[page_id] => 13
[page_parent_id] => 0
[attribute_id] => 9
[children] => Array
(
)
)
[46] => Array
(
[page_id] => 46
[page_parent_id] => 0
[attribute_id] =>
[children] => Array
(
[52] => Array
(
[page_id] => 52
[page_parent_id] => 46
[attribute_id] => 34
[children] => Array
(
)
)
[53] => Array
(
[page_id] => 53
[page_parent_id] => 46
[attribute_id] =>
[children] => Array
(
[54] => Array
(
[page_id] => 54
[page_parent_id] => 53
[attribute_id] => 35
[children] => Array
(
)
)
[70] => Array
(
[page_id] => 70
[page_parent_id] => 53
[attribute_id] =>
[children] => Array
(
)
)
)
)
[56] => Array
(
[page_id] => 56
[page_parent_id] => 46
[attribute_id] =>
[children] => Array
(
)
)
)
)
)
到目前为止我已经知道了,我可以回显我想取消设置的项目,但我不确定如何获得它,所以我可以实际取消设置。
function loop($a) {
if(empty($a['children']))
{
if(empty($a['attribute_id']))
{
var_dump($a);
}
} else {
foreach($a['children'] as $v) {
loop($v);
}
}
}
foreach($pages as $p)
{
loop($p);
}
像这样:
function loop($a) {
$newArray = array();
foreach ($a as $k => $v) {
if (isset($v['children']) && count($v['children']) > 0 ) {
$v['children'] = loop($v['children']);
}
if ((isset($v['children']) && count($v['children']) > 0) || !empty($v['attribute_id'])) {
$newArray[$k] = $v;
}
}
return $newArray;
}
$newArray = loop($a);
我有一个多维数组,我想遍历每个级别的每个项目并删除 'children' 和 'attribute_id' 均为空的任何项目(在本例中,最后 2 个项目带有56 和 70 键)。
Array
(
[11] => Array
(
[page_id] => 11
[page_parent_id] => 0
[attribute_id] => 8
[children] => Array
(
)
)
[12] => Array
(
[page_id] => 12
[page_parent_id] => 0
[attribute_id] =>
[children] => Array
(
[49] => Array
(
[page_id] => 49
[page_parent_id] => 12
[attribute_id] =>
[children] => Array
(
[50] => Array
(
[page_id] => 50
[page_parent_id] => 49
[attribute_id] => 32
[children] => Array
(
)
)
)
)
)
)
[13] => Array
(
[page_id] => 13
[page_parent_id] => 0
[attribute_id] => 9
[children] => Array
(
)
)
[46] => Array
(
[page_id] => 46
[page_parent_id] => 0
[attribute_id] =>
[children] => Array
(
[52] => Array
(
[page_id] => 52
[page_parent_id] => 46
[attribute_id] => 34
[children] => Array
(
)
)
[53] => Array
(
[page_id] => 53
[page_parent_id] => 46
[attribute_id] =>
[children] => Array
(
[54] => Array
(
[page_id] => 54
[page_parent_id] => 53
[attribute_id] => 35
[children] => Array
(
)
)
[70] => Array
(
[page_id] => 70
[page_parent_id] => 53
[attribute_id] =>
[children] => Array
(
)
)
)
)
[56] => Array
(
[page_id] => 56
[page_parent_id] => 46
[attribute_id] =>
[children] => Array
(
)
)
)
)
)
到目前为止我已经知道了,我可以回显我想取消设置的项目,但我不确定如何获得它,所以我可以实际取消设置。
function loop($a) {
if(empty($a['children']))
{
if(empty($a['attribute_id']))
{
var_dump($a);
}
} else {
foreach($a['children'] as $v) {
loop($v);
}
}
}
foreach($pages as $p)
{
loop($p);
}
像这样:
function loop($a) {
$newArray = array();
foreach ($a as $k => $v) {
if (isset($v['children']) && count($v['children']) > 0 ) {
$v['children'] = loop($v['children']);
}
if ((isset($v['children']) && count($v['children']) > 0) || !empty($v['attribute_id'])) {
$newArray[$k] = $v;
}
}
return $newArray;
}
$newArray = loop($a);