PHP中$arr[$key]和$value之间的差异



假设我得到了以下代码:

$arr = array("1" => 1, "2" => 2, "3" => 3, "4" => "4", "5" => "5");
foreach($arr as $key => $value) {
    echo "Array[".$key."]: " . $arr[$key] . "<br>";
    echo "Value: " . $value . "<br>";
    if (isset($arr[$key+1])) $arr[$key+1] = $arr[$key+1]*2;
}

它创建了这个输出:

Array[1]: 1
Value: 1
Array[2]: 4
Value: 2
Array[3]: 6
Value: 3
Array[4]: 8
Value: 4
Array[5]: 10
Value: 5

现在我的问题是,为什么$value在遍历所述数组时与$arr[$key]不同?$value是否因为foreach只是在处理数组的副本或其他什么而没有随数组更新?我可以在不在循环中使用$arr[$key]的情况下解决这个问题吗?

据我所知,PHP使用"写时复制",所以在你尝试写入它之前,所有东西都是一个引用,那时会在你要写入的地方制作一个副本。

因此,是的,这意味着您正在迭代的数组的值与按索引设置的值不同。

另请参阅:

PHP';foreach';真的有效吗?

foreach($arr as $key => $value) { $value=$arr[$key]; echo "Array[".$key."]: " . $arr[$key] . "<br>"; echo "Value: " . $value . "<br>"; if (isset($arr[$key+1])) $arr[$key+1] = $arr[$key+1]*2; }

我认为您应该在for循环中手动分配$value=$arr[$key];,以获得您想要的输出。

foreach中,PHP迭代array的副本,而不是实际的array。相反,当使用each( )for时,PHP在原始数组上迭代。因此,如果您在循环中修改数组,您可能会(也可能不会)得到您期望的行为。

我知道发生了什么,但不知道为什么会发生。

value are *2 when index are in series
if array is (1=>1,2=>2)
than o/p is in $arr[$key](for each) 1 value 1,2 value 4
if array is (3=>1,2=>2)
than o/p is in $arr[$key](for each) 3 value 1,2 value 2
if array is (2=>1,3=>2)
than o/p is in $arr[$key](for each) 2 value 1,3 value 4

if array is (1=>5,3=>2,4=>'3',6=>8)
than o/p is in $arr[$key](for each) 1 value 5,3 value 2,4 value 6,6 value 8

相关内容

最新更新