<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
print_r($arr);
echo ‘<hr />’;
foreach ($arr as $value) {
    $value = $value * 2;
}
print_r($arr);?>能猜到执行结果么?Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
————————————————–
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 24 ) Why? 
最后提供一个信息,我们技术团队在找php开发人员,有兴趣的请把简历发到我的邮箱 [email protected]

解决方案 »

  1.   

    我是奇酷技术团队我们的blog:http://umtech.qihoo.com/ ,有兴趣的请于我们联系,邮箱:[email protected]
      

  2.   

    因为你并没有切断 $value 对 $arr 最后一个单元的引用这样看的清楚些
    $arr = array(1, 2, 3, 4); 
    foreach ($arr as &$value) { 
        $value = $value * 2; 

    print_r($arr); 
    echo ' <hr />'; 
    foreach ($arr as $value) { 
    echo    $value = $value * 2; 
    echo ' ';

    print_r($arr); 这样才能切断引用
    $arr = array(1, 2, 3, 4); 
    foreach ($arr as &$value) { 
        $value = $value * 2; 

    print_r($arr); 
    echo ' <hr />'; 
    unset($value);
    foreach ($arr as $value) { 
    echo    $value = $value * 2; 
    echo ' ';

    print_r($arr); 
      

  3.   

    $arr = array(1, 2, 3, 4);
    foreach ($arr as &$value) {
        $value = $value * 2;
    }
    print_r($arr);
    echo ' <hr />'; 结束后$value依旧是$arr最后一个元素的引用把$value unset()
      

  4.   

    在php中可以很通过在 $value 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。
    <?php 
    $arr = array(1, 2, 3, 4); 
    foreach ($arr as &$value) {//使用了引用 
        $value = $value * 2; 
        echo "<font color = 'red'>".$value."</font>"."<br/>";

    print_r($arr); 
    echo "<hr />"; 
    foreach ($arr as $value) { 
        $value = $value * 2; 
        echo "<font color = 'red'>".$value."</font>"."<br/>";

    print_r($arr); 
    ?> 
    下面是上面代码的运行结果从结果中可以看清“引用”与没有引用是不一样的
      

  5.   

    在php中可以很通过在 $value 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。 
    <?php 
    $arr = array(1, 2, 3, 4); 
    foreach ($arr as &$value) {//使用了引用 
        $value = $value * 2; 
        echo "<font color = 'red'>".$value."</font>"."<br/>";

    print_r($arr); 
    echo "<hr />"; 
    foreach ($arr as $value) { 
        $value = $value * 2; 
        echo "<font color = 'red'>".$value."</font>"."<br/>";

    print_r($arr); 
    ?> 下面是上面代码的运行结果 从结果中可以看到引用与没有引用是不一样的
      

  6.   

    哈哈,楼主调用的是引用,相当于C中的指针,最后一步完了以后,数组停在最后一位,所以后面一个foreach,只相当于调用了$arr[3],不信,可以在最后一个foreach后加一个$value*=2;嘻,可以用reset返回到数组第一项.