近兩天,在做一個項目,遇到一個該用數據存儲ID做鍵值還是用數據排序SORT_NO做數組鍵值的問題,考慮到如果使用數據存儲ID作為鍵值放入數組遍歷數組時會不會影響排序的問題,經過查詢與驗證,得到答案:foreach遍歷數組的順序是按照值存入數組的先后順序進行遍歷的,此為線性遍歷,不受數組鍵值的大小順序影響。
下面寫個簡單的例子描述一下問題:
數據庫存儲user:
自增ID | 排序號SORT_NO | 值VALUE |
1 | 3 | 張三 |
2 | 2 | 李四 |
3 | 1 | 王五 |
通過sql語句:“select ID,SORT_NO,VALUE from user order by SORT_NO ASC”獲得結果:
自增ID | 排序號SORT_NO | 值VALUE |
3 | 1 | 王五 |
2 | 2 | 李四 |
1 | 3 | 張三 |
獲取數據后,將數據按照查詢結果的順序依次放入數組,此時用自增ID作為鍵值存儲,形式如下:
$userList = array(3=>"王五",2=>"李四",1=>"張三");
或者:$userList = array("3"=>"王五","2"=>"李四","1"=>"張三");
此時如果使用foreach遍歷$userList,遍歷順序是值按照存入數組的先后順序還是按照鍵值的排序進行遍歷?
答案:foreach遍歷數組的順序是按照值存入數組的先后順序進行遍歷的,此為線性遍歷。即:
foreach($userList as $value)
{
echo $value.",";
}
運行結果是:王五,李四,張三,
如果使用for循環,就不是線性遍歷:
foreach($i = 0;$i < count($userList);$i++)
{
echo $userList[$i].",";
}
運行結果是:張三,李四,王五,
具體的原理請查看帖子:http://www.jb51.net/article/30566.htm
foreach、while、for三種循環遍歷方式的效率對比請查看帖子:http://www.jb51.net/article/61086.htm