【问题标题】:How can I remove json element by sub json value?如何通过子 json 值删除 json 元素?
【发布时间】:2017-10-24 15:52:04
【问题描述】:

我的 json 是这样的:

[{"id": 1, "name": "xkCT0QUAK7alZkYkbrLUfxoYyn9aXMh2kyCZeYFW.jpeg"}, 
{"id": 2, "name": "9Tg1QLJGiHPC39KP20iOgy3cYQSXOllJTEBGPcF7.jpeg"}, 
{"id": 3, "name": "fWEfhpRkfy44lqC3Ro1etJKmOOkMXnLJLT4ncS6x.png"}]

我有变量$id

如果$id = 2,它将删除具有id = 2的json

如果$id = 3,它将删除具有id = 3的json

例如,它将删除具有id = 2的json

上面的json应该是这样的:

[{"id": 1, "name": "xkCT0QUAK7alZkYkbrLUfxoYyn9aXMh2kyCZeYFW.jpeg"}, 
{"id": 2, "name": "fWEfhpRkfy44lqC3Ro1etJKmOOkMXnLJLT4ncS6x.png"}]

删除后,其id会被排回

我该怎么做?

【问题讨论】:

    标签: php json filtering uniqueidentifier reindex


    【解决方案1】:

    示例输入:

    $json='[{"id": 1, "name": "xkCT0QUAK7alZkYkbrLUfxoYyn9aXMh2kyCZeYFW.jpeg"}, 
    {"id": 2, "name": "9Tg1QLJGiHPC39KP20iOgy3cYQSXOllJTEBGPcF7.jpeg"}, 
    {"id": 3, "name": "fWEfhpRkfy44lqC3Ro1etJKmOOkMXnLJLT4ncS6x.png"}]';
    $id=2;
    

    方法(Demo):

    $new_id=0;
    $input=json_decode($json,true);
    foreach($input as $i=>$a){
        if($a['id']==$id){
            unset($input[$i]);                  // remove the desired subarray
        }else{
            $input[$i]['id']=++$new_id;         // set correct id value (and increment $new_id)
        }
    }
    
    $input=json_encode(array_values($input));   // re-index first-level keys & json encode
    var_export($input);
    

    输出:

    '[{"id":1,"name":"xkCT0QUAK7alZkYkbrLUfxoYyn9aXMh2kyCZeYFW.jpeg"},
      {"id":2,"name":"fWEfhpRkfy44lqC3Ro1etJKmOOkMXnLJLT4ncS6x.png"}]'
    

    【讨论】:

    • 非常感谢您的帮助
    • 好的。我已经删除了它
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多