【问题标题】:unset() converts array into objectunset() 将数组转换为对象
【发布时间】:2016-06-10 21:38:08
【问题描述】:

我有一个要取消设置第一项的数组,但是当我这样做时,我将信息作为 JSON 发送,结果被读取为一个对象。

PHP 数组如下所示:

$myArray = ["one", "two", "three", "four"]

当我使用 json_encode($myArray) 将其作为 JSON 发送时,正如我所期望的那样:

["one","two","three","four"]

但是当我第一次取消设置时:

unset($myArray[0]);

...我从json_encode($myArray) 获得的 JSON 内容如下:

{"1":"one","2":"two"}

是什么让它如此,我如何防止它出现在对象符号中?

据我所见,在 PHP 中,剩余数组的行为类似于数组,我可以使用数组函数,例如 array_searcharray_intersect 等。

【问题讨论】:

    标签: php arrays json


    【解决方案1】:

    在 JSON 中,数组总是从索引 0 开始。因此,如果在 PHP 中删除元素 0,则数组从 1 开始。但这不能用 JSON 中的数组表示法表示。所以它被表示为一个对象,它支持键/值对。

    要让 JSON 将数据表示为数组,必须确保数组从索引 0 开始并且没有间隙。

    要做到这一点,不要使用unset,而是使用array_splice:

    array_splice(myArray, 0, 1);
    

    这样你的数组就会移动,确保第一个元素位于索引 0。

    如果它始终是您要删除的第一个元素,那么您可以使用较短的array_shift

    array_shift(myArray);
    

    【讨论】:

      【解决方案2】:

      我不太确定为什么它会转换为 object 而不是 array。那肯定是因为没有索引0(确实如此)。

      为防止这种情况发生,请使用 array_values 重构数组的索引:

      unset($myArray[0]);
      $myArray = array_values($myArray);
      

      【讨论】:

      • 我选择了其他解决方案,但 +1 用于替代方案和功能信息。
      • 我得到一个错误,array_values() 期望参数 1 是数组,给定对象。
      猜你喜欢
      • 2021-09-23
      • 2021-05-03
      • 2018-12-04
      • 2021-06-16
      • 1970-01-01
      • 2019-07-11
      相关资源
      最近更新 更多