3

用于对日期数组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"}

(抱歉,找不到失败的较小示例)

重点是,为什么要这样做?选项相同,数组结构相同,有什么问题?

4

5 回答 5

10

您的 PHP 数组缺少条目 8,映射(对象)而不是列表(数组)也是如此。

于 2013-08-08T02:33:51.670 回答
4

[8]您在第二个示例中没有设置密钥。根据文档,具有未设置键的顺序数组将被编码为 JSON 对象而不是 JSON 数组。

于 2013-08-08T02:35:41.380 回答
2

在您的第一个示例中,数组从零开始按顺序编号。PHP 将其视为常规数组并对其进行相应编码。

在您的第二个示例中,缺少元素 8。PHP 将其视为关联数组并相应地对键进行编码。

于 2013-08-08T02:35:54.383 回答
1

这是因为索引问题,当您的索引不正确时,它的行为会像这样。

最好的解决方法是重新索引。

$array = array_values($array);

在转换为 JSON 之前这样做。

于 2019-07-17T08:59:58.103 回答
0

就在您对数组进行编码时,执行此操作将重新索引数组值:

$encoded = json_encode(array_values($myArray));
于 2019-09-18T08:17:15.697 回答