我正在处理一个Wordpress菜单数组,我需要通过它循环来取消一个基于嵌套对象值的条目。 我现在做的方式似乎很笨拙。 我确信我可以以某种方式遍历数组来完成这一任务,但这超出了技巧(更像是javascript的家伙)。
虽然这是在Wordpress,但我认为它更多的是一个一般的PHP问题,所以我把它贴在这里。
下面是我所拥有的和我正在努力做的事情的细目:
数组的示例
Array
(
[1] => WP_Post Object
(
[ID] => 13378;
[title] => Courses;
[current_item_parent] => 1;
)
[2] => WP_Post Object
(
[ID] => 13375;
[title] => Images;
[current_item_parent] => 1;
)
[3] => WP_Post Object
(
[ID] => 13379;
[title] => Tests;
[current_item_parent] => 1;
)
[4] => WP_Post Object
(
[ID] => 13875;
[title] => Somethings;
[current_item_parent] => 1;
)
)
基本上,我希望循环遍历下面的数组,如果array->title等于“courses”或“tests”,我希望从数组中取消它的设置。
这是我目前所掌握的。 没有使用$hide数组,但这是我要测试的对象。 我没有一个foreach循环在那里,因为我想不出一个方法使它工作。
function ad_filter_menu($sorted_menu_objects, $args)
{
$hide = array('Courses', 'Tests'); //doing nothing right now
if ($sorted_menu_objects[1]->title == 'Courses') {
unset($sorted_menu_objects[1]);
};
if ($sorted_menu_objects[3]->title == 'Title') {
unset($sorted_menu_objects[3]);
};
return $sorted_menu_objects;
}
最终结果应该如下所示
Array
(
[2] => WP_Post Object
(
[ID] => 13375
[title] => Images
[current_item_parent] => 1
)
[4] => WP_Post Object
(
[ID] => 13875
[title] => Somethings
[current_item_parent] => 1
)
)
在实际循环的数组中,取消设置位总是有点棘手的,所以简单的答案是在处理原始数组时创建一个新数组
function ad_filter_menu($inArr, $args)
{
$hide = array('Courses', 'Tests');
$newArr = [];
foreach ($inArr as $obj) {
if (! in_array($obj->title, $hide)) {
$newArr[] = $obj;
}
}
return $newArr;
}
函数参数$args
似乎没有使用,但我将它留在那里,以防您打算稍后实现
当然,如果您愿意,也可以从原始数组中删除不需要的项
function ad_filter_menu2(&$inArr, $args)
{
$hide = array('Courses', 'Tests');
foreach ($inArr as $idx => &$obj) {
if (in_array($obj->title, $hide)) {
unset($inArr[$idx]);
}
}
}
ad_filter_menu2($inArr, 'sssss');
print_r($inArr);