我有一个json数组,我需要循环遍历并删除所有库存为0的对象。
JSON-
[
{
"products": [
{
"title": "cars",
"stock": 0
},
{
"title": "bike",
"stock": 2
},
{
"title": "dog",
"stock": 0
},
{
"title": "cat",
"stock": 3
}
]
}
]
到目前为止,我有以下代码:
<?php
$str = '[{"products":[{"title":"cars","stock":0},{"title":"bike","stock":2},{"title":"dog","stock":0},{"title":"cat","stock":3}]}]';
$json_decoded = json_decode($str,true);
foreach($json_decoded as $index){
foreach(['products'] as $product_index => $product_data){
if($product_data['stock'] == 0){
unset($json_decoded[$index]['products'][$product_index]);
}
}
}
echo json_encode($json_decoded));
?>
这是可运行的狙击坑:http://sandbox.onlinephpfunctions.com/code/f5d3fb1c98c9cfba7f030c0605e138721bccc937
但我只收到错误:
Warning: Illegal string offset 'stock' in [...][...] on line 6
Warning: Illegal offset type in [...][...] on line 7
我在如何继续的问题上已经走到了死胡同,很明显我的代码有一个错误,但我不太熟悉JSON数组的功能。我需要删除库存为零的任何项目的父项。任何帮助都将不胜感激。
您的foreach循环有一个错误:
foreach($json_decoded as $index){ //<---- here
foreach(['products'] as $product_index => $product_data){ //<---- here
if($product_data['stock'] == 0){
unset($json_decoded[$index]['products'][$product_index]); //<---- and here
}
}
}
应该是这样的:
foreach($json_decoded as $ind=>$data){
foreach($data['products'] as $product_index => $product_data){
if($product_data['stock'] == 0){
unset($json_decoded[$ind]['products'][$product_index]);
}
}
}
对于较短的版本,请尝试此操作:
foreach(array_keys(array_column($json_decoded[0]["products"],"stock"),0) as $no_stock){
unset($json_decoded[0]["products"][$no_stock]);
};
演示:https://3v4l.org/817Gc