我对这个奇怪的问题感到震惊。我正在尝试不断向某些$array
添加记录,将其复制到$cloned
,然后将$cloned
传递给batchInsert
,这会在设计时添加密钥_id
到数组。当我尝试转储原始数组的内容时,我看到了意外的行为,原始数组的内容应该没有$cloned
(复制)数组的引用。相反,_id
同时出现在$array
和$cloned
中,这非常奇怪,我无法想象发生了什么。
这段代码给了我预期的bahaviour
$array = array();
for($i = 1; $i <= 5; $i++) {
$array[] = $i;
$cloned = $array;
passToFunction($cloned);
print_r($array); // expecting not to have anything added to that array
}
function passToFunction(&$b) {
$b["test"] = new Obj();
}
class Obj {
public $test = "test";
}
结果,正确地,
Array
(
[0] => 1
)
Array
(
[0] => 1
[1] => 2
)
Array
(
[0] => 1
[1] => 2
[2] => 3
)
.
.
.
.
但是,如果我使用MongoDB驱动程序,
$m = new MongoClient();
$db = $m->selectDB("test");
$users = $db->users;
for($i = 1; $i <= 5; $i++) {
$array[] = array("number" => $i);
$cloned = $array;
$users->batchInsert($cloned);
print_r($array);
}
给我以下输出:
Array
(
[0] => Array
(
[number] => 1
[_id] => MongoId Object
(
[$id] => 55a7f2bbd04aa45b228b4567
)
)
)
注意_id
键,它不应该在原始数组中,只是在复制的键中。我错过了什么?