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)
我会像这样编写你的可能片段(简短,你读它并确切地知道发生了什么):
$a = is_array($v) ? $v : array($v);
Run Code Online (Sandbox Code Playgroud)
如果$v是标量(布尔值、字符串、数字),您可以使用:
A) $v = (array)$v;
如果$v是一个对象,你必须使用:
b) $v = is_array($v) ? $v : array($v);
方法(b)适用于所有情况(也适用于标量)。
或者,您可以使用settype:
settype($a, "array");
Run Code Online (Sandbox Code Playgroud)
用于显式变量类型。这与在幕后进行类型转换所发生的情况完全相同。(对于分组类型转换更有用,例如在循环中。)
正如其他人所说,将标量值转换为数组将产生一个单例数组(即以标量作为其唯一元素的数组)。然而,正如其他人指出的那样,只有当您知道该值将是标量而不是类实例时,才需要注意执行此操作。
来自PHP 文档:
对于任何类型
integer、float、string和boolean,resource将值转换为数组会生成一个包含索引为零的单个元素和所转换标量值的数组。换句话说,(array)$scalarValue与 完全相同array($scalarValue)。如果将对象转换为数组,则结果是一个数组,其元素是该对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量的变量名前面带有类名;受保护的变量在变量名前有一个“*”。这些前置值的两侧都有空字节。