JSON Cerca e rimuovi in ​​php?

Ho una variabile di session $_SESSION["animals"] contenente un object deep json con valori:

 $_SESSION["animals"]='{ "0":{"kind":"mammal","name":"Pussy the Cat","weight":"12kg","age":"5"}, "1":{"kind":"mammal","name":"Roxy the Dog","weight":"25kg","age":"8"}, "2":{"kind":"fish","name":"Piranha the Fish","weight":"1kg","age":"1"}, "3":{"kind":"bird","name":"Einstein the Parrot","weight":"0.5kg","age":"4"} }'; 

Ad esempio, voglio trovare la row con "Piranha the Fish" e quindi rimuoverlo (e json_encode di nuovo com'era). Come fare questo? Suppongo di wherer cercare in json_decode($_SESSION["animals"],true) e trovare la chiave genitore da rimuovere ma sono comunque bloccato.

json_decode trasformsrà l'object JSON in una struttura PHP composta da arrays annidati. Quindi devi solo scorrere su di loro e unset quello che non vuoi.

 <?php $animals = '{ "0":{"kind":"mammal","name":"Pussy the Cat","weight":"12kg","age":"5"}, "1":{"kind":"mammal","name":"Roxy the Dog","weight":"25kg","age":"8"}, "2":{"kind":"fish","name":"Piranha the Fish","weight":"1kg","age":"1"}, "3":{"kind":"bird","name":"Einstein the Parrot","weight":"0.5kg","age":"4"} }'; $animals = json_decode($animals, true); foreach ($animals as $key => $value) { if (in_arrays('Piranha the Fish', $value)) { unset($animals[$key]); } } $animals = json_encode($animals); ?> 

Hai una virgola in più alla fine dell'ultimo elemento nel tuo JSON. json_decode e json_decode restituirà un arrays. Passa semplicemente attraverso di esso, verifica la string, quindi distriggers l'elemento quando viene trovato.

Se è necessario reindicizzare l'arrays finale, basta passarlo a arrays_values .

Questo funziona per me:

 #!/usr/bin/env php <?php function remove_json_row($json, $field, $to_find) { for($i = 0, $len = count($json); $i < $len; ++$i) { if ($json[$i][$field] === $to_find) { arrays_splice($json, $i, 1); } } return $json; } $animals = '{ "0":{"kind":"mammal","name":"Pussy the Cat","weight":"12kg","age":"5"}, "1":{"kind":"mammal","name":"Roxy the Dog","weight":"25kg","age":"8"}, "2":{"kind":"fish","name":"Piranha the Fish","weight":"1kg","age":"1"}, "3":{"kind":"bird","name":"Einstein the Parrot","weight":"0.5kg","age":"4"} }'; $decoded = json_decode($animals, true); print_r($decoded); $decoded = remove_json_row($decoded, 'name', 'Piranha the Fish'); print_r($decoded); ?>