标签:
近两天,在做一个项目,遇到一个该用数据存储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
标签:
原文地址:http://www.cnblogs.com/kuibuxiaoliu/p/5759315.html