【发布时间】:2021-06-18 23:27:24
【问题描述】:
我看到了一些问题和值得参考的问题
- How can i delete object from json file with PHP based on ID
- How do you remove an array element in a foreach loop?
- How to delete object from array inside foreach loop?
- Unset not working in multiple foreach statements (PHP)
列表中的最后两个更接近我的意图。
我有一个变量名 $rooms,它使用 Guzzle 存储来自特定 API 的数据
$rooms = Http::post(...);
如果我这样做
$rooms = json_decode($rooms);
这就是我得到的
如果我这样做
$rooms = json_decode($rooms, true);
这就是我得到的
现在group 有时与objectId、visibleOn、...处于同一级别,并且可以采用不同的值
所以,我打算做的是从$rooms删除
-
group未设置(例如,必须删除特定值) -
group没有值bananas。
灵感来自最初列表中的最后两个问题
foreach($rooms as $k1 => $room_list) {
foreach($room_list as $k2 => $room){
if(isset($room['group'])){
if($room['group'] != "bananas"){
unset($rooms[$k1][$k2]);
}
} else {
unset($rooms[$k1][$k2]);
}
}
}
请注意,$room['group'] 需要更改为 $room->group,具体取决于我们是否在 json_decode() 中传递了 true。
这是我在上一个代码块之后dd($rooms); 得到的输出
相反,我希望得到与之前在 $rooms = json_decode($rooms); 中显示的结果相同的结果,不同之处在于它不会提供 100 条记录,而是只提供符合两个所需条件的记录。
【问题讨论】:
-
所以,基本上你只想要
if( !isset($room['group']) || $room['group'] != "bananas" )...? -
@CBroe 对,这样可以简化条件。但问题不在于逻辑,而在于输出
-
我在您展示的任何这些屏幕截图中都没有看到
group,那么我们现在应该如何判断出了什么问题呢?请提供正确的minimal reproducible example 问题。 -
@CBroe 刚刚包含了一个带有组的案例的图像
-
您是否尝试将其更改为 laravel 提供的集合而不是从对象转换为数组,然后使用忘记方法
标签: php json laravel foreach guzzle