我有一个变量$ 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