PHP中$ arr [$ key]和$ value的区别

时间:2015-11-26 09:34:50

标签: php arrays foreach key

我们说我得到了以下代码:

$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]来解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

据我所知,PHP使用“copy on write”,所以在你尝试写入之前,所有内容都是引用,那时你会写一个副本。

所以是的,这意味着您迭代的数组的值与索引设置值不同。

另见:

How does PHP 'foreach' actually work?

答案 1 :(得分:0)

我对所发生的事情有答案,但不知道为什么会发生。

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

答案 2 :(得分:0)

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会迭代原始数组。因此,如果您在循环内修改数组,您可能(或可能不)获得您期望的行为。