2011-05-11 72 views
22

我有一個變量$ V,可以是單字符串或字符串
的陣列和我有一個代碼:如何投放變量數組

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

如何能以更優雅的方式做? (換句話說,如何轉換成數組變量)

回答

42

您可以在這個意義上投下變量數組(儘管沒有必要在PHP。)

$var = (array)$arr; 

此外,當你可以做以上的設置變量$arr$var並強制它是一個數組,這樣做幾乎沒有意義。在PHP中,我們可能稱之爲程序員的「數據類型」的東西根本不存在。任何變量都可以是一個double,float,string ......任何東西。它們幾乎完全可以互換。

請參見:http://php.net/manual/en/language.types.php

+0

這會導致php出乎意料的行爲。正確的方法是數組($ arr) – Ulterior 2014-06-23 21:53:30

+21

答案是正確的。 @Ulterior的評論不是。示例: $ arr = null; var_dump((array)$ arr,array($ arr)); 返回:array(0){}(correct),then array(1){[0] => NULL}(不正確) 另外,關於cbroughton的正確答案,當變量必須在foreach()中使用:如果變量不是數組(或迭代),將會有PHP警告。 – FGM 2014-08-12 14:22:53

+2

FWIW:我認爲對於類型轉換很重要如果你有一個變量,它會受到變異的影響,然後是一個函數, 'foreach'或'implode',否則會遇到不必要的錯誤和警告。 – GFargo 2016-11-14 16:51:46

16
$a = (array) $v; 

就是答案。

+2

這麼短,我不得不添加填充字符:-P – Kelly 2011-05-11 20:34:53

+1

我知道這個答案很舊,但不應該這是'$ a =(array)$ v;'?至少在OP的情況下。 – 2016-06-15 16:52:21

3

另外,您可以使用settype

settype($a, "array"); 

對於expliciting變量類型​​。這與幕後的類型匹配完全相同。 (爲方便明智的類型轉換例如,在循環更加有用。)

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;'應該被轉換成'array()'(空數組) – Philipp 2016-02-02 16:53:48

1

如果你正在尋找的對象轉換爲一個計數陣列可以使用如下代碼:

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

嘗試轉換一個對象時,其他提供的答案將無法正常工作,便索性將該對象的字段轉換爲關聯數組(除非您正在嘗試執行此操作)。

$var = (array)$arr;