php 笔试题

$array = array(1,2,3);foreach($array as &$val){	echo "<pre>";	print_r($val);}foreach($array as $val){	echo "<pre>";	print_r($val);}echo implode($array);

为啥结果是122呢 求解释

博海
浏览 1383回答 0
0回答

慕斯4360584

JDWFXXLUNETCCLWURBESYLCSAGDDDGKKANHJDKLBYLWGLIVFPMKVMJSNXZJSWDKHYVLOODAXKTQXQAJOFPJCVIZTJJACCGNVVICJAORBVFUELBMMFCUANDQAQJDORBEVZJANAUJNEOHVZZDGCANNNRCSZRKHQTTQHAXORKVBLVPCBOPPFYBLTGWHKRUUANNXADNURURPIVPZCXHEXFBEWGYRYYVSAXOUUVOYYVPSOROYFFSPZWCFMGEODHHIEPNRFDOGNSCHEUNSMBVIFIYJFYTKOPYLYPSOHWQTAZMWAEXVCSPZJBROYCFPWDXHAXXFBBSNGNZZZMEXMMQRXEHBAWMSVSVIIPIQUNUAENTJGOOCLNAVBBOQGTAMCVPISBNXQERYVIVEIVFBJMPLFDRMPIIVHQHUUXAVSEQJENWMITGGCTBTLVFHTZEPLBNGRROHNHKFSBIFPIMVCYKTTKFYOYLUNTVYLFNQWRKTQGTGQGQLVELLVCSCOMZSCVJJSIMCKJTDPSEXEPPKAGGAOURPDPLFSCSOXAQHQQNGQWPTAJJTDZMTMVQPLQEABRAXKZZCFOCYFISFHHNBMCTWQPMVOHFFWVOOHYEDZRSUXLBNNCWPCTCDDWQUTXKKLBYHBXRDWTMCWCFVYRTSMJQDQZJMYRADRUEKACSKIPFWQWAKUTWIOMUCLOYIBPUNFIIXTTTQYNNVSSPLVYL

慕设计2395807

ZPCZVENKTWYAGZPMYKXXNGCSNXMIJMVEUHWSBENKAWKABENWYTQZVEGWYHDTWMIKHDLUPSIEACRACUXFPYNDSNXTAPSODENWMJSKTCFUJYBXNJFBKYVKTJTCLOQZJLHDZPZONQMPYOYUKAJBHWTCJSBIKGRBEGJKAWGXAOXFVFBJSCFIOWZCYUWZVPYJSAXNJMTPFBHCFVRNQTJMPRUPSPRHWSIRZURMWFVDZPMRUWFIKGJFHCENJZPXUXAHATIMOETPFOXZDSJMVKAPZVFTIYHQZPYUYBZOXAUKGPFVRCLHKTPSISADGCSVXUQFBCZPYAQSVRHDHIQFVRGJTILBJFOXNCQZVFBEUXNJFOXAQAPJRAWSVXNQSPETCYMPYBKVQPZYERXDXMXCUADWMWJIOYHUGUNTGZFFWKHKPRUAJMFFWYAQZPCVYBOXBHNXTAWWJFFFSLBQZPYUUBPBHUWJZZYORIYIUNTGWCILWODDJLHRXOBQJPPSVLROAXFOWWFPSERIIOQGWZKQTMNTMPVOOUXDJJJCLTPPOEUHNDNPPFLONDQZCENWFIETQMPRWMUEGORHKTWORNDTVFOQABRZVFTPMUXAPNUKSVSOENDTTPJGPYBRNDMKZIFFVYBEAPHXGBFOLGWZVCXTCSOJLBRAYVKZWQGQLVXFODGWSBRTWMHDSHDFILNLNXACYOQGCYBRQZHKAPFVKIKVDAWLOKMCSOBRGJLTWSBFIHQMVRUJZWFUMOJZCYBXGDANJLHEHCFCEUDXTXFCKNJGJQTVSHKFHQTCKZISBDTJLVYNDSBDMVQZJFSVDNWTWSORUHDGWYBXZWFIDMPXHXZPSORRADGPSUKAPZOXGOWTWLUYHMJDMIEAJFVL

I_尼克哇

第一次foreach循环采用了 &$val 是变量引用,在结束循环后,变量$val存储的是 数组$array第三个元素的地址。后面的foreach循环使用到变量$val是变量复制,赋值内容为元素的值。看第二个foreach逐条循环第一条循环后 $val = 1,此时由于在上一个foreach中$val最后保存了第三个元素的地址,所以现在赋值就是将值 1,赋给第三个元素地址对应的值部分,即此时数组 $array为 [1, 2, 1]第二条循环后 $val = 2 , 此时赋值就是将值 2,赋给第三个元素地址对应的值部分,即此时数组 $array为 [1, 2, 2]第三条循环后 $val = 2, 注意此时因为在第二条已经改变了第三个元素的值,此时取出结果是2,再次赋值还是将值2,赋给第三个元素地址对应的值部分,即此时数组$array还是为 [1, 2, 2]所以问题的关键在于引用类型保存了元素的地址,再下面代码使用就存在覆盖值的问题。即使不是第二次foreach,是单独赋值也一样会被污染覆盖。所以第一次foreach 采用引用类型后应 unset($val)。
打开App,查看更多内容
随时随地看视频慕课网APP