Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何替换数组中的元素_Php_Arrays_Mongodb_Mongodb Query - Fatal编程技术网

Php 如何替换数组中的元素

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",

我在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",     
        "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,事实上,到目前为止,现有数据对我来说并不重要,因为我仍在开发我的产品。但是,如果我需要更改现有数据,此代码肯定会帮助我。