JSON Search and remove in php?

前端 未结 3 1697
-上瘾入骨i
-上瘾入骨i 2020-12-03 18:56

I have a session variable $_SESSION[\"animals\"] containing a deep json object with values:

$_SESSION[\"animals\"]=\'{
\"0\":{\"kind\":\"mammal\         


        
相关标签:
3条回答
  • 2020-12-03 19:35

    This works for 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) {
                    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);
    
    ?>
    
    0 讨论(0)
  • 2020-12-03 19:37

    json_decode will turn the JSON object into a PHP structure made up of nested arrays. Then you just need to loop through them and unset the one you don't want.

    <?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);
    ?>
    
    0 讨论(0)
  • 2020-12-03 19:55

    You have an extra comma at the end of the last element in your JSON. Remove it and json_decode will return an array. Simply loop through it, test for string, then unset the element when found.

    If you need the final array reindexed, simply pass it to array_values.

    0 讨论(0)
提交回复
热议问题