2017-03-15 46 views
0

什么是完全在PHP & $值$和值之间的foreach循环的区别? 它是如何工作的? 在下面的示例中,print_r($ arr)将返回在第一个循环中修改的数组,而在第二个循环中未修改。PHP adressing变量差异

<?php 

$arr = array(1, 2, 3, 4); 

foreach ($arr as $key => &$value) { 
    $value = $value * 2; 
    echo "$key => $value; "; 
    print_r ($arr); 
    echo '<br>'; 
} 

unset ($value); 
unset ($key); 

echo '<br>Second loop without "&" on value <br>'; 

foreach ($arr as $key => $value) { 

    $value = $value * 2; 
    echo "$key => $value; " ; 
    print_r($arr); 
    echo '<br>'; 
} 

?> 

我现在是一个初学者的问题,因为我是一个:)

+1

请阅读[通过引用传递(http://php.net/manual/en/language.references.pass.php) – peterm

+1

另外,https://stackoverflow.com/questions/10057671/how-do-php-foreach-actually-work – AbraCadaver

回答

1

按引用而不是按值传递的价值。通过引用传递的变量(使用参考运算符'&')可以在函数内部更改它们的值。
例如,参见the examples here

+0

谢谢先生。 因此,如果我没有正确理解,如果我不通过引用传递它,我可以用foreach循环内的数组“玩”,但其值之外的数据将保持不变。 所以一旦循环完成,数组将保持不变,只要我不使用引用传递。 – Radu

+0

如果通过引用传递,请确保取消设置(因为它在代码中),否则它仍将在循环外引用。 http://php.net/manual/en/control-structures.foreach.php – FD3