Php 如何替换数组中的元素
我在MongoDB中有一个集合Php 如何替换数组中的元素,php,arrays,mongodb,mongodb-query,Php,Arrays,Mongodb,Mongodb Query,我在MongoDB中有一个集合collflokks,示例文档是:- { "_id" : "b_8AUL", "f_name" : "Pizza. Hut", "f_lat" : "22.7523513", "f_lng" : "75.9225847", "c_uid" : "33", "f_type" : NumberLong(3), "members" : [ "42",
collflokks
,示例文档是:-
{
"_id" : "b_8AUL",
"f_name" : "Pizza. Hut",
"f_lat" : "22.7523513",
"f_lng" : "75.9225847",
"c_uid" : "33",
"f_type" : NumberLong(3),
"members" : [
"42",
"43"
]
}
在“members”数组中,我想添加像{id:42,name:Mark}
,{id:43,name:Hughes}
目前我只添加ID(例如42,43)。我只关心新的数据,因为它将有新的ID。请建议
早些时候,我使用以下代码将其推入members数组:
$flokkCollection = 'collFlokks';
$flokkCollection->update(
array("_id" => $f_handle),
array('$push' => array("members" => $u_id))
);
如果您在这里要求的是“替换现有数据”,那么您需要“循环”集合的结果,并使用新格式“替换”现有的数组内容 可能有更聪明的方法来解决这个问题,但你并没有在你的问题中真正给我们所有必要的信息,所以我只能用基本的术语来回答 假设你有:
$required = array(
array(array("id" => "42"), array("name" => "Mark")),
array(array("id" => "43"), array("name" => "Hughes"))
);
作为输入,然后执行如下操作:
function myMapper($v) {
return $v["id"];
}
$mapped = array_map("myMapper",$required);
foreach( $mapped as $value) {
$filtered = array_values(
array_filter($required,function($k) {
return $k["id"] == $value;
})
)[0];
collection.update(array(
array("members" => $value),
array('$set' => array(
"members.$" => $filtered
))
));
}
它应该使用查找数组元素的匹配“位置”,该位置由update语句的“查询”部分中使用的值确定,然后在该语句的“更新”部分中,将当前数组索引为原始输入数组中“过滤”内容索引处的新值
在PHP之外。我们将这些内部元素称为“对象”,而不是“数组”,这是PHP符号的特点。关键/价值的东西是“对象”,而“列表”是“数组”。我很抱歉没有提供正确的信息,因为我不习惯在这里提问。实际上,我想改变功能,以新的方式将其推入阵列中-id&name。。。我想我用:-$user\u data=array('uid'=>$u id,'name'=>Dishu')解决了这个问题;数组(“$push”=>数组(“成员”=>$user_数据))@dgcoder除了我的观点之外,这不是什么大问题,可能有更好的方法可以将“Mark”和“Hughes”映射到您真正想要做的事情中的相关“id”值。无论如何,这至少应该为一般过程提供一个指导。@dgcoder您并没有“解决它”。您需要“删除”或“替换”现有数组成员,如本例所示。否则,您只会得到现有的数组成员和添加的“新”成员,这显然是您不想要的感谢@Blakes,事实上,到目前为止,现有数据对我来说并不重要,因为我仍在开发我的产品。但是,如果我需要更改现有数据,此代码肯定会帮助我。