使用json_encode
对日期数组进行编码,有时会做一件事,有时做另一件事。
例如,如果我正在尝试编码:
array(6) {
[0]=>
string(6) "Jun-24"
[1]=>
string(6) "Jun-25"
[2]=>
string(6) "Jun-28"
[3]=>
string(11) "Training-24"
[4]=>
string(6) "Jun-29"
[5]=>
string(6) "Jun-30"
}
将输出
["Jun-24","Jun-25","Jun-28","Training-24","Jun-29","Jun-30"]
然而,当我尝试编码类似的东西时:
array(17) {
[0]=>
string(6) "Jun-23"
[1]=>
string(6) "Jun-24"
[2]=>
string(6) "Jun-28"
[3]=>
string(11) "Training-24"
[4]=>
string(6) "Jun-29"
[5]=>
string(6) "Jun-30"
[6]=>
string(6) "Jul-06"
[7]=>
string(6) "Jul-07"
[9]=>
string(6) "Jul-09"
[10]=>
string(6) "Jul-16"
[11]=>
string(6) "Jul-17"
[12]=>
string(6) "Jul-20"
[13]=>
string(6) "Jul-23"
[14]=>
string(6) "Jul-24"
[15]=>
string(6) "Jul-30"
[16]=>
string(6) "Aug-01"
[17]=>
string(6) "Aug-05"
}
将输出
{"0":"Jun-23","1":"Jun-24","2":"Jun-28","3":"Training-24","4":"Jun-29","5":"Jun-30","6":"Jul-06","7":"Jul-07","9":"Jul-09","10":"Jul-16","11":"Jul-17","12":"Jul-20","13":"Jul-23","14":"Jul-24","15":"Jul-30","16":"Aug-01","17":"Aug-05"}
(抱歉,找不到失败的小例子)
重点是,它为什么这样做?选项是相同的,数组结构相同,问题是什么?
答案 0 :(得分:7)
您的PHP数组缺少第8项,因此是映射(对象)而不是列表(数组)。
答案 1 :(得分:4)
您的第二个示例中没有设置密钥[8]
。根据文档,带有unset键的顺序数组将被编码为JSON对象而不是JSON数组。
答案 2 :(得分:2)
在第一个示例中,数组从零开始按顺序编号。 PHP将其视为传统阵列并对其进行相应编码。
在您的第二个示例中,元素8缺失。 PHP将其视为关联数组并相应地对密钥进行编码。
答案 3 :(得分:0)
由于索引问题, 当您的索引不正确时,它的行为将是这样。
解决的最佳方法是重新编制索引。
$array = array_values($array);
在转换为JSON之前执行此操作。
答案 4 :(得分:0)
仅在对数组进行编码时,请执行以下操作以重新索引数组值:
$encoded = json_encode(array_values($myArray));