2011-05-11 4 views
22

चर कास्ट करने के लिए मैं एक चर $ वी है कि या तो एक स्ट्रिंग या तार
की सरणी हो सकता है और मैं एक कोड है:कैसे सरणी

$a = array(); 
if (is_array($v)) { 
    $a = $v; 
} else { 
    $a[] = $v; 
} 

यह कैसे और अधिक सुरुचिपूर्ण तरीके से किया जा सकता है? (दूसरे शब्दों में, कैसे सरणी के लिए एक चर कास्ट करने के लिए)

उत्तर

42

आप इस अर्थ में एक सरणी के लिए एक चर डाली कर सकते हैं (हालांकि PHP में करने के लिए कोई जरूरत नहीं है।)

$var = (array)$arr; 

साथ ही, जब तुम वेरिएबल $arr को $var में सेट करने के लिए उपरोक्त कर सकते हैं और इसे सरणी बनाने के लिए मजबूर कर सकते हैं, ऐसा करने में कोई बात नहीं है। PHP में, अधिकांश चीजें जिन्हें हम "डेटा प्रकार" कह सकते हैं क्योंकि प्रोग्रामर बस अस्तित्व में नहीं हैं। कोई भी चर एक डबल, फ्लोट, स्ट्रिंग ... सब कुछ एक साथ हो सकता है। वे लगभग पूरी तरह से अंतर-परिवर्तन योग्य हैं।

देखें: http://php.net/manual/en/language.types.php

+0

यह परिणाम php अप्रत्याशित व्यवहार में परिणाम देता है। सही तरीका सरणी है ($ arr) – Ulterior

+21

उत्तर सही है। @Ulterior द्वारा टिप्पणी नहीं है। उदाहरण: $ arr = null; var_dump ((सरणी) $ arr, सरणी ($ arr)); रिटर्न: सरणी (0) {} (सही), फिर सरणी (1) {[0] => न्यूल} (गलत) इसके अलावा, cbroughton के सही उत्तर के संबंध में, इस तरह के कलाकारों की आवश्यकता होती है जब चर एक foreach() में प्रयोग किया जाना चाहिए: यदि चर एक सरणी (या पुनरावृत्त) नहीं है, तो एक PHP चेतावनी होगी। – FGM

+2

FWIW: मुझे लगता है कि टाइपकास्ट करना महत्वपूर्ण है यदि आपके पास कभी भी एक चर है तो यह एक फ़ंक्शन के बाद उत्परिवर्तन के अधीन है जो एक सरणी लेता है उदा। 'foreach' या' implode' अन्यथा आप अवांछित त्रुटियों और चेतावनियों में भाग लेंगे। – GFargo

16
$a = (array) $v; 

जवाब है।

+2

यह इतना छोटा था कि मुझे फिलर वर्ण जोड़ना पड़ा :-P – Kelly

+1

मुझे पता है कि यह उत्तर बहुत पुराना है, लेकिन यह '$ a = (सरणी) $ v;' नहीं होना चाहिए? कम से कम ओपी के मामले के लिए। –

3

वैकल्पिक रूप से आप settype इस्तेमाल कर सकते हैं:

settype($a, "array"); 

वैरिएबल प्रकार expliciting लिए। दृश्यों के पीछे एक टाइपकास्ट के साथ क्या होता है यह वही है। (अधिक छोरों में समूह-वार typecasting उदाहरण के लिए उपयोगी है।)

6

मैं अपने इस तरह झलकी सकता लिखते थे (कम है और आप इसे पढ़ सकते हैं और जानते हैं कि वास्तव में क्या हो रहा है):

$a = is_array($v) ? $v : array($v); 
-3

असल में अगर आप चाहते हैं एक सरणी के लिए डाली और आप इसे में डाल के बारे में चिंता करने की ज़रूरत नहीं है, इस सवाल का जवाब

$var = (is_object($var)) ? array($var) : (array) $var; 

आप नीचे दिए गए कोड

के साथ इस परीक्षण कर सकते हैं है
function toArray($var) { 
    return (is_object($var)) ? array($var) : (array) $var; 
} 

$object = new stdClass; 
$resource = fopen('php://stdout', 'w'); 
$closure = function() {}; 

$tests = array(
    array(toArray(true),  array(true),  'boolean true'), 
    array(toArray(false),  array(false),  'boolean false'), 
    array(toArray(null),  array(),   'null'), 
    array(toArray(1),   array(1),   'positive integer'), 
    array(toArray(0),   array(0),   'zero integer'), 
    array(toArray(-1),  array(-1),  'negative integer'), 
    array(toArray(1.5),  array(1.5),  'positive float'), 
    array(toArray(0.0),  array(0.0),  'zero float'), 
    array(toArray(-1.5),  array(-1.5),  'negative float'), 
    array(toArray(''),  array(''),  'empty string'), 
    array(toArray('foo'),  array('foo'),  'string'), 
    array(toArray(array()), array(),   'array'), 
    array(toArray($object), array($object), 'object'), 
    array(toArray($resource), array($resource), 'resource'), 
    array(toArray($closure), array($closure), 'closure'), 
); 

foreach ($tests as $test) { 
    ob_start(); 
    var_dump($test[0]); 
    $a = ob_get_clean(); 
    ob_start(); 
    var_dump($test[1]); 
    $b = ob_get_clean(); 
    assert($a === $b, "{$test[2]} is not the same"); 
} 
+0

दरअसल ... यह सच नहीं है। आप '$ var = (array) $ obj;' -> '$ object = new stdClass; 'को सरणी में ऑब्जेक्ट्स को कास्ट कर सकते हैं;' सरणी() '(खाली सरणी) में डाला जाना चाहिए – Philipp

1

आप एक ही गिनती सरणी के लिए एक वस्तु कन्वर्ट करने के लिए आप का पालन कोड का उपयोग कर सकते देख रहे हैं:,

$list = array([0] => $obj); 

अन्य प्रदान की जवाब जब एक वस्तु कन्वर्ट करने के लिए कोशिश कर रहा है काम नहीं करेगा यह बस होगा उस ऑब्जेक्ट के फ़ील्ड को एक सहयोगी सरणी में परिवर्तित करें (जब तक कि आप ऐसा करने का प्रयास नहीं कर रहे हों)।

$var = (array)$arr;