我正在研究一种过滤系统,以过滤掉菜单上显示的食物。菜单集合中的每个文档都包含类别的名称(如果需要,还包含课程)和一系列食品。
我尝试了各种解决方案,例如以下代码,使我更接近所需的输出。
foreach($menu as $category){
foreach($category["fooditems"] as $fooditem){
if ($fooditem["vegetarian"] == false){
if (($key = array_search($fooditem, (array) $category["fooditems"])) !== false)
unset($category["fooditems"][$key]);
}
}
}
之前:
{
"category" : "Starters",
"fooditems" : [
{
"name" : "No meat",
"vegetarian" : true,
},
{
"name" : "Horse Meat",
"vegetarian" : false,
},
{
"name" : "Some more meat",
"vegetarian" : false,
}
]
}
预计之后:
{
"category" : "Starters",
"fooditems" : [
{
"name" : "No meat",
"vegetarian" : true,
}
]
}
之后的实际情况:
{
"category" : "Starters",
"fooditems" : [
{
"name" : "No meat",
"vegetarian" : true,
},
{
"name" : "Some more meat",
"vegetarian" : false,
}
]
}
问题在于发现非素食食品并使其凝固后,它停止循环。我不知道为什么会这样。
感谢所有回答:)
的人答案 0 :(得分:0)
使用true
将JSON解码为数组后,您可以过滤并仅返回等于true
的值:
$menu['fooditems'] = array_filter($menu['fooditems'],
function($v) {
return $v['vegetarian'] === true;
});
要使用循环,只需使用数组的完整路径跟踪键和unset
:
foreach($menu['fooditems'] as $key => $values) {
if($values['vegetarian'] === false) {
unset($menu['fooditems'][$key]);
}
}