JSON поиск и удаление в php? - PullRequest
6 голосов
/ 25 мая 2010

У меня есть переменная сеанса $_SESSION["animals"], содержащая глубокий объект json со значениями:

$_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"}
}'; 

Например, я хочу найти строку с «Рыба-пиранья» и затем удалить ее (и json_encodeэто опять как было).Как это сделать?Я думаю, мне нужно искать в json_decode($_SESSION["animals"],true) результирующий массив и найти родительский ключ для удаления, но я все равно застрял.

Ответы [ 3 ]

12 голосов
/ 25 мая 2010

json_decode превратит объект JSON в структуру PHP, состоящую из вложенных массивов. Тогда вам просто нужно перебрать их и unset тот, который вам не нужен.

<?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_array('Piranha the Fish', $value)) {
        unset($animals[$key]);
    }
}
$animals = json_encode($animals);
?>
3 голосов
/ 25 мая 2010

У вас есть лишняя запятая в конце последнего элемента в вашем JSON. Удалите его и json_decode вернет массив. Просто пройдитесь по нему, проверьте строку, а затем сбросьте элемент при обнаружении.

Если вам нужно переиндексировать окончательный массив, просто передайте его array_values ​​.

2 голосов
/ 25 мая 2010

Это работает для меня:

#!/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) {
                array_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);

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...