gpt4 book ai didi

php - 为什么我的 php 数组作为对象保存到 MongoDB,然后作为带有字符串化键的关联数组检索?

转载 作者:可可西里 更新时间:2023-11-01 10:33:37 25 4
gpt4 key购买 nike

背景:

我正在构建的这个应用程序中有一个类,它的工作是:

  • __construct: $this->data = $this->mongoDB->collection->findOne();
  • 使用中间函数以每个请求的数十种不同方式处理数据。一种操纵可能触发另一种操纵。只要 $this->data['_id'] 保持不变,这就允许我只用一个查询就可以对 mongo 文档进行无限制的更新。这是唯一允许对此特定集合进行数据操作的地方。
  • __destruct: $this->monboDB->collection->save($data)
  • 然后数据被读回,json_encode然后发送到 Javascript 来绘制页面

意图:

我打算通过遍历所述数组、匹配其中的值并取消设置来删除数组的成员。示例:

foreach($this->data['documents'] as $key => $val){
if($val == $toBeDeleted){
unset($this->data['documents'][$key];
}
}

然后,当脚本完成时,这将被保存到数据库中。

问题:

当 javascript 读回数据时,我没有 ['a', 'b', 'd'],而是 {'0': 'a', '1 ': 'b', '3': 'd'} - 不能将其视为数组,并且会破坏很多东西。

最佳答案

a-hah! 时刻之前,我已经将这个问题打了一半,所以我想我也应该张贴自己的答案以供将来引用。

在php中,关联数组和数组是一样的。您可以使用乱序键、不连续键以及几乎任何您想在调用数组成员时使用的键。大多数(如果不是全部的话)php 数组函数适用于任何数组键。对象是完全不同的东西。

话虽这么说,Javascript 并不共享数组的相同规则。 javascript 数组必须具有从零开始的连续键,否则它就是一个对象。 MongoDB 在这方面类似于 Javascript。

当 php 将对象转换为在 MongoDB 或 Javascript 中使用时,如果 php 数组不遵循该规则,它将成为 Javascript 对象。

问题是在取消设置数组索引后,它留下了一个间隙,导致不连续的数组键,导致它成为一个对象。简单的修复方法是 array_slice($array, $key, 1)$array = array_values($array)

关于php - 为什么我的 php 数组作为对象保存到 MongoDB,然后作为带有字符串化键的关联数组检索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14860247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com