gpt4 book ai didi

php - 使用 JSON.stringify 时不需要的数组索引

转载 作者:可可西里 更新时间:2023-11-01 00:24:57 26 4
gpt4 key购买 nike

我使用 JSON.stringify 方法将数组传递给服务器。

我有一个包含 4 个元素的数组:

arr[10] = 1;
arr[20] = 1;
arr[30] = 1;
arr[40] = 1;

然后我这样做:

arr = JSON.stringify(arr);

然后发送到服务器:

                jQuery.ajax({
type: "post",
url: baseurl+"profile/mprofile/action/ratings/add_ratings",
data:{"checkbox":checkbox,"review":review,"speciality":speciality,"arr":arr},
success: function(data, status) {

jQuery('#header-error').html(data);
}
});

我正在用 PHP 获取数组:

    $arr = $this->ci->input->post('arr');
$arr = json_decode($arr);
print_r($arr) ; die ;

结果是

Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] => 1
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] => 1
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] => 1
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] => 1
)

为什么会这样?

最佳答案

这就是 javascript 数组的工作原理。当您将值设置为超出范围的索引时,数组会扩展,值会成功设置,所有“缺失”值都会设置为 undefined

PHP 的行为混合了数组和字典(或“关联数组”,在 PHP 谈话中)之间的差异,你被宠坏了。

要避免这种行为,只需在 javascript 中创建一个字典而不是数组。

var arr = {};
arr[10] = 1;
arr[20] = 2;

此外,在 PHP 端,您应该将 true 作为第二个参数传递给 json_decode

json_decode($arr, true)

这将使它返回数组而不是 stdclass。

关于php - 使用 JSON.stringify 时不需要的数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8879737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com