php
  • json
  • 2010-05-25 13 views 5 likes 
    5

    मैं एक सत्र चर $_SESSION["animals"] मूल्यों के साथ एक गहरी json वस्तु युक्तJSON खोज और PHP में हटा दें?

    $_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) जिसके परिणामस्वरूप सरणी में खोज और दूर करने के लिए माता-पिता कुंजी खोजने की जरूरत है, लेकिन मैं वैसे भी stucked हूँ लगता है।

    उत्तर

    11

    json_decode एक PHP संरचना नेस्टेड सरणियों से बना में JSON ऑब्जेक्ट हो जाएगा। फिर आपको केवल उन लोगों के माध्यम से लूप करने की आवश्यकता है और 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); 
    ?> 
    
    +0

    धन्यवाद! और अगर मैं कुंजी नाम नहीं जानता तो यह कैसे करें? – moogeek

    +1

    यदि कोई कुंजी नाम नहीं जानता है तो यह बेहतर समाधान नहीं है। – Sarfraz

    +0

    @moogeek: क्या आपका मतलब है "प्रकार", "नाम", "वजन" और इस मामले में "उम्र"? आपको लगता है कि पता नहीं है, तो आप, यात्रा की एक और परत लागू करने के लिए की आवश्यकता होगी '$ मान' के माध्यम से पाशन और अपने स्ट्रिंग के खिलाफ प्रत्येक उप-मूल्य की जाँच। आप इसे मिल जाए, 'सेट नहीं ($ जानवरों [$ कुंजी])' के रूप में यह ऊपर करता है काम करेंगे, और आप तो लूप के बाहर तोड़ सकते हैं। मैंने इस कोड को मेरे उत्तर में जोड़ा है। –

    3

    आपके JSON में अंतिम तत्व के अंत में आपके पास अतिरिक्त कॉमा है। इसे हटाएं और json_decode एक सरणी वापस कर देगा। बस इसके माध्यम से लूप, स्ट्रिंग के लिए परीक्षण, फिर मिला जब तत्व को अनसेट करें।

    आप reindexed अंतिम सरणी की जरूरत है, बस इसे array_values लिए गुजरती हैं।

    2

    यह मेरे लिए काम करता है:

    #!/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); 
    
    ?> 
    
    संबंधित मुद्दे