Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 强制json_encode在平面数组中创建数值字符串_Javascript_Php_Json - Fatal编程技术网

Javascript 强制json_encode在平面数组中创建数值字符串

Javascript 强制json_encode在平面数组中创建数值字符串,javascript,php,json,Javascript,Php,Json,我必须将PHP数组编码为JavaScript数组。不幸的是,如果数组包含整数而不是字符串,我使用的jQuery库将无法正确处理该数组 大多数情况下,这将生成只包含字符串的正确数组: json_encode($data) 即使$data只包含数字,我通常会得到以下结果: ["3","7","8"] 但有时,我会得到这样的结果(注意零): 还是这个 [16171,15470,10390,7585] (注意,这显然是不同的数据来说明发生

我必须将PHP数组编码为JavaScript数组。不幸的是,如果数组包含整数而不是字符串,我使用的jQuery库将无法正确处理该数组

大多数情况下,这将生成只包含字符串的正确数组:

json_encode($data)
即使
$data
只包含数字,我通常会得到以下结果:

["3","7","8"]
但有时,我会得到这样的结果(注意零):

还是这个

[16171,15470,10390,7585]

(注意,这显然是不同的数据来说明发生了什么)。我需要强制执行json_encode以将数组值视为字符串。我知道有一个相反的选项JSON_NUMERIC_CHECK强制执行数字。是否真的不存在等价物?似乎我唯一的选择是在JavaScript端再次处理数组,这虽然可能,但在某种程度上破坏了我对象的封装。

如果有与
JSON\u NUMERIC\u CHECK相反的选项,那就好了,但看起来没有

在编码数据之前,为什么不能确保数据在php中的类型正确


这可能意味着您必须手动将其转换为字符串…

在数组中将它们定义为字符串,或者如果它来自其他地方:

$data = json_encode(array_map('strval', $data));
json\u decode()
可以将大整数转换为字符串,如果在函数调用中指定标志:

$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING)

因为
JSON\u NUMERIC\u CHECK
没有相反的标志,所以我为此创建了一个函数。
它接受一维和多维数组,并且可以添加条件来验证te数组的每个元素

function JSON_NUMERIC_STRING($array){
    foreach($array as $key => &$value){
        if(is_array($value)){
            $value = iterateMA($value);
        }elseif(is_numeric($value)){
            $value = strval($value);
        }
        // add more conditions if needed...
    }
    return $array;
}

$array = JSON_NUMERIC_STRING($array);

也许这会有帮助。问候@Tino这与我想要的正好相反,正如前面提到的“不幸的是,如果数组包含int而不是字符串,我正在使用的jQuery库将无法正确处理该数组”。。。。如果它们实际上是数字,那么我会说是您的jQuery库出了问题。但为什么不在将它们传递到库中时将它们转换为字符串呢?“尽管有时”——这种行为不像听起来那么随机,而是取决于数组中值的数据类型。我想没有办法。唯一的方法可能是遍历数组并使其成为字符串。你说得对,我确实能做到。我试图避免它,因为我想两次使用同一个数组,一次使用JSON_NUMERIC_CHECK(作为数据数组),一次使用字符串(用于所述数据的工具提示)。这意味着我现在必须添加一个额外的循环和一个新数组。我宁愿不要像那样膨胀我的代码。啊,好吧,这是一个解决方案。不是一个选项,因为我根本没有解码它们。我构建了一个JSON字符串,该字符串通过$.getJSON()检索,然后直接传递到jQuery库。不管您的递归代码段没有在任何地方声明
iterateMA()
,这个过程都可以通过
array\u walk\u recursive()
来简化。这是。我还认为,在allcaps中命名自定义函数是不可取的,这将使开发人员感到困惑,他们最初会推断该语法表示常量。
function JSON_NUMERIC_STRING($array){
    foreach($array as $key => &$value){
        if(is_array($value)){
            $value = iterateMA($value);
        }elseif(is_numeric($value)){
            $value = strval($value);
        }
        // add more conditions if needed...
    }
    return $array;
}

$array = JSON_NUMERIC_STRING($array);