2011-03-24 15 views
12

(array)$someemptyvariablethatisnotarray रिटर्न array([0] =>) बजाय array()पीएचपी - खाली सरणी

मैं जब मैं यह foreach के अंदर उपयोग कर रहा हूँ यह तो मैं एक खाली सरणी कि दोहराया नहीं है मिल कैसे कर सकते हैं()?

+3

जब आप 'var_dump()' का उपयोग करने के बजाय 'print_r के()' यह आप भी सरणी में मान का प्रकार दिखाता है! – powtac

उत्तर

18

सुविधा है जो आप उपयोग कर रहे प्रयास करें, "casting" कहा जाता है। इसका मतलब है कि एक चर को आपके उदाहरण में एक सरणी दिया गया है। Var कैसे परिवर्तित किया जाता है PHP में हमेशा स्पष्ट नहीं है!

आपके उदाहरण में $ someemptyvariablethatisnotarray एक पूर्ण मूल्य के साथ एक प्रविष्टि के साथ एक सरणी बन जाता है।

PHP documentation का कहना है:

सरणी के लिए एक स्वचालित रूपांतरण के व्यवहार वर्तमान में अनिर्धारित रहता है।

अपने कोड का समाधान करने के लिए मैं कुछ इस तरह की सिफारिश करेंगे:

if (!is_array($someemptyvariablethatisnotarray) { 
    $someemptyvariablethatisnotarray = array(); 
} 
+1

http://www.php.net/manual/en/language.types.array.php#language.types.array.casting –

+2

यदि आपने एनएलएल को सरणी के रूप में डाला है, तो यह एक खाली सरणी बन जाएगा, अगर आपने एक स्केलर मान डाला (यहां तक ​​कि एक खाली स्ट्रिंग, क्योंकि यह शून्य नहीं है) यह उस मान के साथ एक सरणी बन जाती है, न कि एक पूर्ण मान। –

24
$var = array(); 

एक सरणी खाली कर देगा। क्या यह आप के बाद क्या है?

3
$somevar = empty($somevar) ? array() : (array)$somevar; 

शायद? हालांकि मुझे यकीन नहीं है कि मुझे कास्ट, या उद्देश्य मिलता है। थोड़ा अधिक (शायद एक आप क्या हासिल करने की कोशिश कर रहे हैं के उदाहरण?) ellaborate को देखभाल

+0

मैं इसे 'foreach ((सरणी) $ $ के रूप में कुछ $) का उपयोग कर रहा हूं ... '। कभी-कभी $ कुछ "झूठा" हो सकता है और एक सरणी नहीं हो सकता है, इसलिए मैं इसे पुन: सक्रिय नहीं करना चाहता हूं – Alex

+0

@Alexandra: मुझे PHP की लचीला पता है, लेकिन यदि आप अपने चर डेटा को स्विच करने वाले चर ढूंढ रहे हैं, तो चेक होना चाहिए इसे पकड़ने के लिए कहीं और (दूसरे शब्दों में एक कलाकार पर भरोसा मत करो)। मैं बंदूक कूदने जा रहा हूं और मानता हूं कि यह डेटाबेस से संबंधित है, और एक लांच पंक्ति जो संभावित रूप से एक झूठी वापसी कर सकती है जो आपको तत्वों पर पुन: सक्रिय करने से रोकती है, सही? –

+0

हाँ :) मुझे हर छोटी चीज़ के लिए चेक बनाने से नफरत है, लेकिन मुझे लगता है कि मेरे पास कोई विकल्प नहीं है .. – Alex

2

जब आप एक सरणी के रूप में एक गैर सरणी डाली, तो वह केवल मूल्य के रूप में है कि चर के साथ एक सरणी पैदा करता है।

यदि आप एक खाली सरणी चाहते हैं, तो आपको array() वापस करने की आवश्यकता है।

3

आप कैसे हैं? इसका मतलब है कि आप एक ही होगा, क्योंकि जब आप सेट

$something = false; 
foreach((array)(empty($something) ? null : $something) as $k){ 
    echo 'never enters here'; 
} 

आप एक खाली सरणी नहीं मिलता है, "(सरणी) झूठे", :

मुझे इस पर विश्वास है कि तुम क्या कर रहे हैं के बाद है तत्व, और उस तत्व में "गलत" मान दिया जाएगा।

ही एक खाली स्ट्रिंग के साथ होता है (नहीं एक अशक्त एक!) (सरणी) $ emptystring एक सरणी जो एक एकल तत्व है, जो एक खाली स्ट्रिंग होता है वापस आ जाएगी!

इसी प्रकार के कर रहे हैं:

array(''); 

आशा है कि यह मदद करता है।

चीयर्स!

0

सिर्फ count() उपयोग करते हैं, उदाहरण के लिए: if(count($array) == 0){ // empty array }

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