如果字符串只包含数字,我可以遍历PHP中的多维数组并将类型从字符串转换为整数吗


Can I walk through a multidimensional array in PHP and convert the type from strings to integers if they contain only numbers?

我有一个多维数组,其中有些值是字符串,有些值是数字。当我将数组转换为JSON对象时,我得到的结果如下:

"A" : "1", "B" : "Text", "C" : "3"

目标是拥有一个类似的JSON

"A" : 1, "B" : "Text", "C" : 3

之前,我是通过在JSON编码后编辑它来实现这一点的:

$JSON = preg_replace('/"(-?'d+'.?'d*)"/', '$1', json_encode($array));

但这一直是个问题,原因有很多。

因此,在使用json_encode()将数组转换为JSON之前,我想逐步查看所有值,并确保如果值是数字,那么他们为该值键入的类型将从string更改为int

我知道我可以用settype((命令在PHP中设置变量的类型:

settype(int, $variable);

我认为我需要将其与array_walk()这样的命令结合起来,但我不知道如何将其结合起来,以便它只对数字进行操作。

在PHP中,是否可以遍历多维数组,找到只包含数字的值,并将其转换为int类型?

您可以使用JSON_NUMERIC_CHECK选项:

$array = array('A' => '1', 'B' => 'Text', 'C' => '3');
echo json_encode($array, JSON_NUMERIC_CHECK);

或者你可以在数组上循环:

$array = array('A' => '1', 'B' => 'Text', 'C' => '3');
foreach ($array as & $value) {
    if (is_string($value) && ctype_digit($value)) {
        $value = (int) $value;
    }
}
echo json_encode($array);

编辑:为了子孙后代,&$value变成一个引用(指向数组项的实际内容(,而不仅仅是一个有值的变量。

从PHP 5.3.3开始,就有一个json_encode选项:JSON_NUMERIC_CHECK