如何替换数组中的元素

时间:2015-07-11 10:24:40

标签: php arrays mongodb mongodb-query

我在MongoDB中有一个COLLECTION 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"   
    ]   
}   

在"成员"数组,我想添加像{id:42,name:Mark}{id:43,name:Hughes}这样的数组 目前我只添加ID(例如.42,43)。我只关心新数据,因为它会有新的ID。请建议。

之前我使用此代码进入成员数组:

$flokkCollection = 'collFlokks';
$flokkCollection->update(
       array("_id" => $f_handle), 
       array('$push' => array("members" => $u_id))
);

1 个答案:

答案 0 :(得分:1)

如果您在这里要求的是“替换现有数据”,那么您需要“循环”集合中的结果并“替换”新格式存在的数组内容。

有可能采用更明智的方法来解决这个问题,但您并没有真正向我们提供您问题中的所有必需信息,因此我只能用基本术语回答。

假设你有:

$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
        ))
    ));
}

哪个应该使用positional $ operator通过update语句的“query”部分中使用的值来查找数组元素的匹配“位置”,然后在该语句的“update”部分中{{ 3}}当前数组索引到原始输入数组的“过滤”内容索引处的新值。

PHP之外。我们称这些内部元素为“对象”而不是“数组”,这是PHP符号特征。键/值的东西是“对象”,“列表”是“数组”。