繁体   English   中英

从作为对象元素的数组中删除元素

[英]Removing an element from an array which is an element of an object

我正在研究过滤系统来过滤出菜单上显示的食物。 菜单集合中的每个文档都包含类别的名称(如果您愿意,还包含课程)和一系列食品。

我尝试了各种解决方案,例如下面的代码让我更接近所需的输出。

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,
        }
    ]
}

问题是在它发现非素食食品并取消它后,它就会停止循环。 我不知道为什么会这样。

谢谢任何回答:)的人

将JSON解码为具有true的数组后,您可以过滤并仅返回等于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]);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM