PHP7 中 foreach 的疑问
巴扎黑
巴扎黑 2017-04-11 08:59:41
[PHP讨论组]

使用 foreach 遍历数组时,遇到了这种情况:

$arr[2] = 2;
$arr[1] = 1;
$arr[0] = 0;

foreach ($arr as $key=>$value) {
    echo $value . ' ';
}

结果是:
2 1 0

也就是遍历出来的结果是和数组元素写入的顺序一致,而不是和下标顺序一致。这是因为 foreach 的实现方式的原因吗?

巴扎黑
巴扎黑

全部回复(6)
伊谢尔伦

PHP的数组保存元素的顺序是根据元素插入的顺序来保存的,而不是索引顺序
鸟哥博客 深入理解PHP之数组遍历顺序

$arr[2] = 2;
$arr[0] = 0;
$arr[1] = 1;
foreach ($arr as $key=>$value) {
    echo $value . ' ';//2 0 1 
}
迷茫

先进先出原则,数据都是存放在堆栈中,先定义的$arr[2] = 2,肯定是放在首位,所以遍历的时候指针先指向首位的元素

怪我咯

先排序sort asort rsort arsort 很多的数组函数 总有一个适合你 ^_^ ^_^ ^_^

PHPz

这和php版本没关系吧

foreach依赖的是数组内部指针

你echo current($arr) 看看当前的指针位置

阿神

至少PHP 4就是这么设定的,这也是PHP数组的特点之一(HashMap的特征)

你唯一能做的是 排序 ksort

除非如下操作,由PHP维护KEY的自增

$a[] = '';
array_push($a, '')
迷茫

这个是文本流的形式,跟队列差不多,先插入先输出。可以利用一些PHP数组函数 进行排序。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号