【问题标题】:weird behavior of json_encode functionjson_encode 函数的奇怪行为
【发布时间】:2012-11-21 17:14:16
【问题描述】:

我有这个正常的数组名称 $arr.. 并尝试使用 array_push() 函数在数组上推送一些东西.. 比如array_push( $arr['alerts_data'], 999 ); 它产生这个输出:

Array
(
    [alerts_data] => Array
        (
            [0] => 169
            [1] => 175
            [2] => 111
            [3] => 48
            [4] => 999
        )

)

当我使用 json_encode 时,我得到了:

{"alerts_data":[169,175,111,48,111,999]}

但是,当我尝试从 $arr 中取消设置()时:

unset( $arr['alerts_data'][4] );// will remove removes the 999

然后再次使用json_encode,我得到了这个json对象

{"alerts_data":{"0":169,"1":175,"2":111,"3":48}}

这里有什么问题?你能告诉?我想通过使用unset()函数来实现上面第一个编码的json。

【问题讨论】:

  • 我无法确认您上面的确切示例(删除最后一个数字元素)。但是,如果您删除了一个数组键,导致数字出现间隙,您将得到一个对象。
  • 使用你的确切例子,我得到{"alerts_data":[169,175,111,48]}

标签: php


【解决方案1】:

是的,是因为数组键不再连续,所以被当作关联数组处理,PHP的关联数组变成了JavaScript对象,因为JavaScript没有关联数组。

使用 array_splice() 从数组中彻底删除元素。

【讨论】:

  • ... 和 PHP 关联数组成为 JavaScript 对象,因为 JavaScript 没有关联数组。
  • 你去,谢谢你的回答,不知道 array_splice() 对我有用。
  • @ÁlvaroG.Vicario:请随时编辑我的答案,以便下次添加重要的细节:)
  • @KennethPalaganas:它实际上是为这样的情况而设计的。如果此答案解决了您的问题,请考虑通过单击答案分数下方的绿色大勾号 (✔) 来投票并接受它。
  • 是的,但这样做需要一些时间:) 无论如何谢谢
【解决方案2】:

您的键中有一个间隙(从 3 到 5),因此必须创建一个对象 才能使其有效。两种可能的解决方案:

array_splice($arr['alerts_data'], 4, 1);

unset($arr['alerts_data'][4]);
$arr['alerts_data'] = array_values($arr['alerts_data']);

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 2019-06-03
    • 2011-06-14
    • 2020-01-31
    • 2014-05-24
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多