【问题标题】:Unsetting index in array turns it to an object取消设置数组中的索引将其转换为对象
【发布时间】:2014-02-16 06:34:15
【问题描述】:

所以我有一个存储在 CouchDB 中的 JSON 文档。这是它的重要部分:

"games": {
   "creator": [
       "cf86d68b24c1bbf22702356572027642",
       "cf86d68b24c1bbf22702356572027dd8",
       "cf86d68b24c1bbf22702356572028b77"
   ],
   "solver": {
   }
}

我正在尝试从数组中删除一项,比如说索引 1:

error_log("pre unset: " . json_encode($user->games));
unset($user->games->creator[1]);
error_log("post unset: " . json_encode($user->games));

问题是,它不断将我的数组转换为对象,如下所示:

pre unset: {"creator":["cf86d68b24c1bbf22702356572027642","cf86d68b24c1bbf22702356572027dd8","cf86d68b24c1bbf22702356572028b77"],"solver":{}}
post unset: {"creator":{"0":"cf86d68b24c1bbf22702356572027642","2":"cf86d68b24c1bbf22702356572028b77"},"solver":{}}

发生了什么,我该如何解决?

【问题讨论】:

    标签: php arrays json unset


    【解决方案1】:

    我是这样解决的:

    unset($user->games->creator[1]);
    $user->games->creator = array_values($user->games->creator);
    

    【讨论】:

    • array_values() 期望参数 1 是数组,给定对象
    【解决方案2】:

    不要使用unset,而是使用array_splice。这将自动调整数组索引:

    array_splice($user->games->creator, 1, 1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2017-11-07
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多