2009-05-07 17 views
14

मैं त्रुटि को फेंकने से बचने के लिए, किसी सरणी में कोई कुंजी मौजूद है या नहीं, मैं तुरंत पहचानना चाहता हूं।एक गहरी सरणी मान मौजूद है या नहीं, यह जांचने के लिए कि

उदाहरण के लिए, मैं सभी को एक $ आगमन [ 'एफ'] [ 'बी'] में किसी भी चर नहीं हो सकता इस

$arr['f']['b']['g'] = array('a', 'b', 'c',) ; 

या सरणी की तरह एक सरणी हो सकता है:

$arr['f']['x'] = array() ; 

$ arr ['f'] ['b'] ['g'] की (शायद) सामग्री को संदर्भित करते समय मैं परीक्षण में पुनरावृत्ति से कैसे बच सकता हूं?

if (isset($arr['f']) && 
    isset($arr['f']['b']) && 
    isset($arr['f']['b']['g']) /* ... yawn */) { 
    /* blah */ 
} 

यह पहचानने के लिए एक छोटा रास्ता होना चाहिए कि एक निर्दिष्ट सरणी मान मैं संदर्भित कर रहा हूं या नहीं? ऐसा लगता है कि मैं जिस मूल्य की तलाश करता हूं, और उसके सभी पूर्वजों की उपस्थिति के लिए परीक्षण करना भी बहुत ही वर्बोज़ लगता है। कुछ परिस्थितियों में जो समझ में आता है, हाँ, लेकिन सभी नहीं।

उदाहरण द्वारा: यह, का प्रतिनिधित्व कर सकते कहना, उपयोगकर्ता> सत्र-> गाड़ी है, जहां मैं एक तरह से जल्दी से जाँच करने के लिए है कि क्या गाड़ी प्रविष्टियां हैं चाहते हैं, के लिए प्रत्येक एक जांच शामिल करने की आवश्यकता है कि क्या उपयोगकर्ता मौजूद है, तो चाहे सत्र मौजूद है, तो चाहे गाड़ी मौजूद है, फिर ...

संपादित करें: "मौजूद 'जी' की एक प्रमुख नाम के साथ एक सरणी मूल्य करता है" मैं के लिए नहीं देख रहा हूँ, जैसा कि "f => b => g के पूर्वजों के साथ एक सरणी मान मौजूद है"।

उत्तर

25

निम्नलिखित आपकी अपेक्षा के अनुसार काम करेगा:

if(isset($a['a']['b']['c'])) 

उन तत्वों के किसी भी अपरिभाषित कर रहे हैं, isset() अवास्तविक लौटाते हैं।

+0

हू! अच्छी तरह से देखा गया :) –

+3

बस स्पष्ट करने के लिए, यह सुरक्षित रूप से '$ a' के अस्तित्व का परीक्षण करता है: यदि' $ a' सेट नहीं है तो यह झूठा हो जाता है। –

+0

वाह, साल के लिए यकीन था कि यह काम नहीं करता है। जबरदस्त हंसी। – baldrs

0

array_search की टिप्पणियों में उनके पास बहु आयामी खोज के लिए कोड है। यह मदद कर सकता है।

+0

उत्तर के लिए धन्यवाद। उस पृष्ठ पर एक दर्जन से अधिक उदाहरण कोड ब्लॉक हैं (अधिक, मुझे गिनती नहीं हुई), लेकिन मैं नहीं देख सकता कि उनमें से कौन सा समाधान प्रदान करेगा जो कुशल होगा (या तो terseness के मामले में, या प्रदर्शन)। मैं जो भी कर रहा हूं उसे स्पष्ट करने के लिए प्रश्न अपडेट कर दूंगा। एक बार फिर धन्यवाद! –

संबंधित मुद्दे

 संबंधित मुद्दे