यदि आप वस्तुओं को गतिशील शब्दकोशों के रूप में उपयोग करते हैं (और मुझे लगता है कि आप करते हैं), तो मुझे लगता है कि आप एक ArrayObject का उपयोग करना चाहते हैं ।
यह खाली होने पर भी JSON शब्दकोश में मैप करता है। यह बहुत अच्छा है अगर आपको सूचियों (सरणियों) और शब्दकोशों (साहचर्य सरणियों) के बीच अंतर करने की आवश्यकता है:
$complex = array('list' => array(), 'dict' => new ArrayObject());
print json_encode($complex); // -> {"list":[],"dict":{}}
आप इसे मूल रूप से जोड़ तोड़ भी कर सकते हैं (जैसा कि आप एक सहयोगी सरणी के साथ करेंगे), और यह एक शब्दकोश में ठीक से प्रस्तुत करता रहेगा:
$complex['dict']['a'] = 123;
print json_encode($complex); // -> {"list":[],"dict":{"a":123}}
unset($complex['dict']['a']);
print json_encode($complex); // -> {"list":[],"dict":{}}
यदि आपको दोनों तरीकों से 100% संगत होने की आवश्यकता है , तो आप इसे लपेट भी सकते हैं json_decodeताकि यह वस्तुओं के ArrayObjectsबजाय वापस आ जाए stdClass(आपको परिणाम पेड़ पर चलना होगा और सभी वस्तुओं को पुन: प्रतिस्थापित करना होगा, जो काफी आसान काम है)।
गोचर । केवल एक मैंने अब तक पाया है: का is_array(new ArrayObject())मूल्यांकन करता है false। आपको is_arrayघटनाओं को खोजने और बदलने की आवश्यकता है is_iterable।