Как удалить элемент json по значению sub json?

Мой JSON, как это:

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

У меня есть переменная $id

если $id = 2, он удалит JSON, которые имеют id = 2

если $id = 3, он удалит JSON, которые имеют id = 3

Например, он удалит JSON, которые имеют id = 2

JSON выше, чтобы быть таким:

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

После удаления его идентификатор будет отсортирован

Как мне это сделать?

3

Решение

Пример ввода:

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

Метод (демонстрация):

$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"}]'
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]