如何将变量转换为数组

tsd*_*sds 35 php arrays variables casting

我有一个变量$ v,可以是单个字符串或字符串数​​组,
我有一个代码:

$a = array();
if (is_array($v)) {
    $a = $v;
} else {
    $a[] = $v;
}
Run Code Online (Sandbox Code Playgroud)

如何以更优雅的方式完成?(换句话说,如何将变量转换为数组)

cbr*_*ton 66

您可以使用以下命令将变量强制转换为数组:

    $var = (array)$arr;
Run Code Online (Sandbox Code Playgroud)

  • 答案是对的.@Ulterior的评论不是.示例:$ arr = null; var_dump((array)$ arr,array($ arr)); 返回:array(0){}(正确),然后是array(1){[0] => NULL}(不正确)另外,关于cbroughton的正确答案,当变量必须在a中使用时需要这样的强制转换foreach():如果变量不是数组(或可迭代),则会出现PHP警告. (27认同)
  • FWIW:我认为对于类型转换很重要如果你有一个变量,它会受到突变,然后是一个带有数组的函数,例如`foreach`或`implode`,否则你会遇到不需要的错误和警告. (2认同)

Kel*_*lly 17

$a = (array) $v;
Run Code Online (Sandbox Code Playgroud)

是答案.

  • 它太短了我不得不添加填充字符:-P (2认同)

kap*_*apa 9

我会像这样编写你的可能片段(简短,你读它并确切地知道发生了什么):

$a = is_array($v) ? $v : array($v);
Run Code Online (Sandbox Code Playgroud)


Lia*_*kos 6

如果$v标量(布尔值、字符串、数字),您可以使用:

A) $v = (array)$v;

如果$v是一个对象,你必须使用:

b) $v = is_array($v) ? $v : array($v);

方法(b)适用于所有情况(也适用于标量)。


mar*_*rio 5

或者,您可以使用settype

settype($a, "array");
Run Code Online (Sandbox Code Playgroud)

用于显式变量类型。这与在幕后进行类型转换所发生的情况完全相同。(对于分组类型转换更有用,例如在循环中。)


Guy*_*ock 5

正如其他人所说,将量值转换为数组将产生一个单例数组(即以标量作为其唯一元素的数组)。然而,正如其他人指出的那样,只有当您知道该值将是标量而不是类实例时,才需要注意执行此操作。

来自PHP 文档

对于任何类型integerfloatstringbooleanresource将值转换为数组会生成一个包含索引为零的单个元素和所转换标量值的数组。换句话说,(array)$scalarValue与 完全相同 array($scalarValue)

如果将对象转换为数组,则结果是一个数组,其元素是该对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量的变量名前面带有类名;受保护的变量在变量名前有一个“*”。这些前置值的两侧都有空字节。