php中的一些不常見的問題foreach/in_array,foreachin_array
php在開發效率很高,這是無可厚非的,但是卻是在犧牲執行效率的。php數組功能非常強大,但是也要多加考慮,多試幾種情況情況,以防萬一,這裡,我就簡單的說兩個遇到的坑,以後如果有發現更多的,再補上吧!
foreach 提供了遍曆數組的簡單方式,可以很方便的讀取到資料或對象的內容,但是官方文檔說了,由於 foreach 依賴內部數組指標,在迴圈中修改其值將可能導致意外的行為。所以,基本上,1、不要想在迴圈內部修改裡面的值,否則結果將超出你想要的;2、使用'&'是一個安全的方式,雖然很少用到,但是在用到時,在引用結束後,應立即調用unset函數銷毀該變數,否則,在接下來的代碼裡,如果有再次使用到此變數,那麼迴圈的最後一次值就將被修改了,從而得到了意外的值,比如:在列表迴圈輸出時,最後一行輸出將會出現許多亂七八糟的值或者空值。使用unset可解決此問題。
in_array,其含義是檢查前一個字串是否存在於後一個數組當中,而且大多數情況下,它也是這麼工作的,但是當後面的數組是整數時,如array(0,1,2,3)時,就出問題了,php會將前的字串進行intval,從而都會得到0這個值,那麼如果恰巧,你的數組當中有這個值,那麼等式就成立了,是不是又超出了預期呢?所以,當確定後面的資料是整數時,尤其是還有可能為0(這個可能代替所有的字串了),你就千萬不能再使用這個函數了,可使用key_exists來代替,但是後面的資料則需要使用array_flip進行倒轉操作了。
當一個字串被當作數組來去取值時,又會發生什麼呢?php是一門容錯性很強的語言,它會盡量幫你改正錯誤,所以很聰明地將你的引用下標轉化為整數,當然就得到0了,那麼字串下標為0取值則又會得到第一個字串的值,是不是又超出了你的預期呢?解決方案是,在引用下標之前,還是確認一下這個變數是不是一個數組吧,is_array。
雖然有許許多多的前輩遇到這樣或那樣的問題,也在不停地說,但是我們終究還是免不了,不停去犯錯。這也許就是社會吧!大家都這麼忙,哪有時間去破解你那爛代碼! 哈哈
http://www.bkjia.com/PHPjc/1066745.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1066745.htmlTechArticlephp中的一些不常見的問題foreach/in_array,foreachin_array php在開發效率很高,這是無可厚非的,但是卻是在犧牲執行效率的。php數組功能非常強...