それはPHPを使用して、特定の条件に一致する場合、トラブルの削除は、JSON配列からオブジェクト。コードはエラーを投げています

ジェイソン・ワルツ:

私はをループする必要があり、この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]);   
        }
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=275257&siteId=1