取消设置数组中的索引将其转换为对象

Posted

技术标签:

【中文标题】取消设置数组中的索引将其转换为对象【英文标题】: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":

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

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于取消设置数组中的索引将其转换为对象的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 unset() 函数将数组转换为对象?

如何以角度将 JSON 对象数组转换为 Observable 数组

plist中的NSdictionary对象需要是数组的数组,怎么转换?

转换具有 numpy 数组的列将其转换为 dtype 作为对象的 numpy 数组

如何将对象数组转换为具有索引的对象?

如何将对象列表转换为对象列表数组,每个数组索引都有 2 个计数?