我有一個變量$ V,可以是單字符串或字符串
的陣列和我有一個代碼:如何投放變量數組
$a = array();
if (is_array($v)) {
$a = $v;
} else {
$a[] = $v;
}
如何能以更優雅的方式做? (換句話說,如何轉換成數組變量)
我有一個變量$ V,可以是單字符串或字符串
的陣列和我有一個代碼:如何投放變量數組
$a = array();
if (is_array($v)) {
$a = $v;
} else {
$a[] = $v;
}
如何能以更優雅的方式做? (換句話說,如何轉換成數組變量)
您可以在這個意義上投下變量數組(儘管沒有必要在PHP。)
$var = (array)$arr;
此外,當你可以做以上的設置變量$arr
爲$var
並強制它是一個數組,這樣做幾乎沒有意義。在PHP中,我們可能稱之爲程序員的「數據類型」的東西根本不存在。任何變量都可以是一個double,float,string ......任何東西。它們幾乎完全可以互換。
$a = (array) $v;
就是答案。
這麼短,我不得不添加填充字符:-P – Kelly 2011-05-11 20:34:53
我知道這個答案很舊,但不應該這是'$ a =(array)$ v;'?至少在OP的情況下。 – 2016-06-15 16:52:21
我會寫你可以摘錄如下(短,你讀它,知道到底發生了什麼):
$a = is_array($v) ? $v : array($v);
其實,如果你想投到一個數組,而不必擔心你放什麼進去,得到的答覆是
$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");
}
其實......這是不正確的。你可以像'$ var =(array)$ obj;' - >'$ object = new stdClass;'應該被轉換成'array()'(空數組) – Philipp 2016-02-02 16:53:48
如果你正在尋找的對象轉換爲一個計數陣列可以使用如下代碼:
$list = array([0] => $obj);
嘗試轉換一個對象時,其他提供的答案將無法正常工作,便索性將該對象的字段轉換爲關聯數組(除非您正在嘗試執行此操作)。
$var = (array)$arr;
這會導致php出乎意料的行爲。正確的方法是數組($ arr) – Ulterior 2014-06-23 21:53:30
答案是正確的。 @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
FWIW:我認爲對於類型轉換很重要如果你有一個變量,它會受到變異的影響,然後是一個函數, 'foreach'或'implode',否則會遇到不必要的錯誤和警告。 – GFargo 2016-11-14 16:51:46