PHP7 中 foreach 的疑问

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

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

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

结果是:
2 1 0

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

阅读 4.8k
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 很多的数组函数 总有一个适合你 ^_^ ^_^ ^_^

这和php版本没关系吧

foreach依赖的是数组内部指针

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

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

你唯一能做的是 排序 ksort

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题