我有一个多维数组,其中有些值是字符串,有些值是数字。当我将数组转换为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
。