【发布时间】:2015-07-12 03:32:41
【问题描述】:
在 PHP 5.5.33 中,我想在重复循环中创建一个数组数组。我发现了 3 种不同的方法,它们给出了 3 种不同的结果。第一个结果是我想要的结果,所以我有一个解决方案。我需要的是了解为什么这三种方式会导致不同的结果。
前两个例子对我来说很有意义。第三个似乎应用了外星逻辑。在第三个示例中,我在每次迭代时创建一个对新数组的新引用,但每次都将相同的引用添加到输出数组中。为什么 $inner 在上一个示例中每次都没有在新的内存地址处重新创建?
<?php
// Inner array added after it is changed
$outer = array();
for ($ii=0; $ii<3; $ii++) {
$inner = array("value" => 0);
$inner["value"] = $ii;
$outer[$ii] = $inner;
}
echo json_encode($outer);
// [{"value":0},{"value":1},{"value":2}]
?>
<br />
<?php
// Innner array added as a copy, and then changed
$outer = array();
for ($ii=0; $ii<3; $ii++) {
$inner = array("value" => 0);
$outer[$ii] = $inner;
$inner["value"] = $ii;
}
echo json_encode($outer);
// [{"value":0},{"value":0},{"value":0}]
?>
<br />
<?php
// Inner array created, then added by reference, then changed
$outer = array();
for ($ii=0; $ii<3; $ii++) {
$inner = array("value" => 0); // shouldn't this be different each time?
$outer[$ii] = &$inner;
$inner["value"] = $ii;
}
echo json_encode($outer);
// [{"value":2},{"value":2},{"value":2}]
?>
【问题讨论】:
标签: php arrays pass-by-reference