在php中對數組遍歷用得最多要算是foreac,while,for這幾種方法了,下面我們來介紹這三種遍歷數組的實現程序代碼吧。
經常會有人問我,PHP的數組,如果用foreach來訪問,遍歷的順序是固定的么? 以什么順序遍歷呢?比如如下代碼:
- <?php$arr['laruence'] = 'huixinchen';
- $arr['yahoo'] = 2007;
- $arr['baidu'] = 2008;
- foreach ($arr as $key => $val)
- {
- //結果是什么?
- }
又比如如下代碼:
- <?php
- $arr[2] = 'huixinchen';
- $arr[1] = 2007;$arr[0] = 2008;
- foreach ($arr as $key => $val)
- {
- //現在結果又是什么?
- }
當我們使用each/next系列函數來遍歷的時候,也是通過移動數組的內部指針而實現了順序遍歷,這里有一個問題,比如如下代碼:
- <?php
- $arr = array(1,2,3,4,5);
- foreach ($arr as $v) {//可以獲取}
- while (list($key, $v) = each($arr))
- {//獲取不到}
- ?>
了解到我剛才介紹的知識,那么這個問題也就很明朗了,因為foreach會自動reset,而while這塊不會reset,所以在foreach結束以后,pInternalPointer指向數組最末端, while語句塊當然訪問不到了,解決的辦法就是在each之前,先reset數組的內部指針.
也就是說, PHP中遍歷數組的順序, 是和元素的添加先后相關的, 那么, 現在我們就很清楚的知道,文章開頭的問題的輸出是:
huixinchen,2007,2008
所以,如果你想在數字索引的數組中按照索引大小遍歷,那么你就應該使用for,而不是foreach,代碼如下:
- for($i=0,$l=count($arr); $i<$l; $i++)
- { //這個時候,不能認為是順序遍歷(線性遍歷)}
新聞熱點
疑難解答