2011-05-11 47 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;