【问题标题】:PHP json_encode - Strange behaviourPHP json_encode - 奇怪的行为
【发布时间】:2013-08-09 15:10:42
【问题描述】:

使用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"}

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

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

【问题讨论】:

    标签: php json behavior


    【解决方案1】:

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

    【讨论】:

    • 很好,这让我有点难过
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        解决问题的最佳方法是重新索引。

        $array = array_values($array);
        

        在转换为 JSON 之前这样做。

        【讨论】:

          【解决方案5】:

          就在你对数组进行编码时,这样做会重新索引数组值:

          $encoded = json_encode(array_values($myArray));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-06
            • 1970-01-01
            • 2014-07-08
            • 2021-11-21
            • 2018-05-20
            • 2012-01-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多