PHP将字符串表示形式转换为正确的类型

时间:2019-06-25 09:20:42

标签: php casting

例如,我有一个像["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;
        }

但不确定如何转换为布尔值。

2 个答案:

答案 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);