例如,我有一个像["889003521", "level5", "120", "1.1", "500", "10", "false"]
这样的字符串列表,我需要将每个元素转换为像[889003521. "level5", 120, 1.1, 500, 10, false]
这样的实类型,实现这一点的最佳方法是什么?谢谢。
更新: @ 04FS我找到了一种进行int / float转换的方法,不确定是否是最好的方法
if (is_numeric($value)) {
$floatVal = floatval($value);
if($floatVal && intval($floatVal) != $floatVal){
return $floatVal;
}
return (int)$value;
}
但不确定如何转换为布尔值。
答案 0 :(得分:1)
您可以使用json_decode。请记住,对于字符串,它在解码时可以返回null,因此我们正在检查转换后的值是否不为null。
$arr = ["889003521", "level5", "120", "1.1", "500", "10", "false"];
$ret = [];
foreach($arr as $val) {
$converted = \json_decode($val);
$ret[] = $converted ?? $val;
}
这是$ ret数组的内容:
0 = {int} 889003521
1 = "level5"
2 = {int} 120
3 = {float} 1.1
4 = {int} 500
5 = {int} 10
6 = false
答案 1 :(得分:0)
除了 tomfor 的回答(谢谢),这里有一个递归函数来为关联数组/json 对象设置正确的类型:
function convertType($obj) {
if (gettype($obj) == 'array') {
foreach ($obj as $k => $v) {
$obj[$k] = convertType($v);
}
return $obj;
}
$converted = \json_decode($obj);
return $converted ?? $obj;
}
你可以这样使用它:
$jsonWithCorrectTypes = convertType($someJson);