ジェイソン・ワルツ:
私はをループする必要があり、この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));
?>
ここでは、実行可能なsnippitは次のとおりです。http://sandbox.onlinephpfunctions.com/code/f5d3fb1c98c9cfba7f030c0605e138721bccc937
しかし、私はエラーのみを受信します。
Warning: Illegal string offset 'stock' in [...][...] on line 6
Warning: Illegal offset type in [...][...] on line 7
私は、続行する方法についての行き止まりにしています明らかに私のコードに誤りがありますが、私はどのようにJSON配列の機能に精通していないです。私はゼロの株式で任意の項目の親を削除する必要があります。すべてのヘルプはそんなにいただければ幸いです。
軸P:
あなたの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]);
}
}
}