<?php$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');foreach($arrGoogle as $a=>$b){ if($b != "") {
$arrGoogle[$a] = "123";
}
echo "$a:".$b."<br/>";
}?>运行结果:
brand:google
email:Gmail
WebBrowser:Chrome
phone:Android
问题:我说上面这个数组值应该都被我替换成了123,为何还是原来的值呢,感谢各位大侠指导,谢谢

解决方案 »

  1.   


    $arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');foreach($arrGoogle as $a=>$b){    if($b != "") {
            $arrGoogle[$a] = "123";
        }
        echo "$a:".$b."<br/>"; //你输出的是a与b值,你并没有改变
    //你改变的是 arrgoogle 的数组值
    }
      

  2.   

    其实,数组的值已经改了,只是$b的值没改而已。<?php
    $arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');
    foreach($arrGoogle as $a=>$b){
        if($b != "") {
            $arrGoogle[$a] = "123";
        }   
    }
    print_r($arrGoogle);
    ?>
      

  3.   

    去看看foreach的用法吧。每遍历一次指针下移一次。
      

  4.   

    没错,你确实是将他们都修改成了 123
    循环后输出一下 print_r($arrGoogle); 就可以看到Array
    (
        [brand] => 123
        [email] => 123
        [WebBrowser] => 123
        [phone] => 123
    )但你只是输出了他们修改前的副本 $b
    如果你想让修改立即生效,需要写作foreach($arrGoogle as $a=>&$b){
      

  5.   

    很简单的问题,简化下问题
    $a = 'brand';
    $b = $arrGoogle[$a];
    $arrGoogle[$a] = '123';
    echo $a.$b;
    你怎么能认为$arrGoogle[$a]变了,$b就向应变了呢?他们之间可没有引用联系。