2

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

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

目标是有一个看起来像这样的 JSON

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

之前,我通过在 JSON 编码后编辑 JSON 来完成此操作:

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

但由于种种原因,这一直是个问题。

因此,相反,在将数组转换为带有 的 JSON 之前json_encode(),我想逐步检查所有值并确保如果一个值是一个数字,那么他们为该值键入的类型从 更改stringint

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

settype(int, $variable);

我认为我需要将它与类似的命令结合起来array_walk(),但我不知道如何以某种方式结合它,以便它进行测试以仅对数字起作用。

是否可以在 PHP 中搜索多维数组,查找仅包含数字的值并将它们转换为int类型?

4

2 回答 2

2

自 PHP 5.3.3 以来有一个选项json_encode应该这样做:JSON_NUMERIC_CHECK

于 2013-01-06T11:56:42.097 回答
2

您可以使用以下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一个引用(它指向数组项的实际内容),而不仅仅是一个带有值的变量。

于 2013-01-06T11:59:49.787 回答