PHP数组遍历与实现原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP数组遍历与实现原理相关的知识,希望对你有一定的参考价值。
一维数组遍历(普通)
一、for与foreach遍历结果顺序一致
$arr = array(‘max‘,‘xiaoli‘,‘xiaowang‘,‘laosan‘);
//for遍历
for($i=0;$i<count($arr);$i++){
echo $arr[$i];//max xiaoli xiaowang laosan
}
//foreach遍历
foreach($arr as $item){
echo $item;//max xiaoli xiaowang laosan
}
二、for与foreach遍历结果不一致
$arr = array();
$arr[]=‘max‘;
$arr[2] =‘xiaoli‘;
$arr[]=‘xiaowang‘;
$arr[1]=‘laosan‘;
//for遍历
for($i=0;$i<count($arr);$i++){
echo $arr[$i];//max laosan xiaoli xiaowang
}
//foreach遍历
foreach($arr as $item){
echo $item;//max xiaoli xiaowang laosan
}
一维数组遍历(关联)
$arr = array(
‘name‘=>‘max‘,
‘age‘=>18,
‘address‘=>‘北京‘
);
//for遍历
for($i=0;$i<count($arr);$i++){
echo $arr[$i];//undefined offset 0 1 2(未定义下标,无法读取)
}
//foreach遍历
foreach($arr as $item){
echo $item;//max 18 北京
}
二维数组遍历(普通)
$arr = array(
array(‘name‘,‘age‘,‘address‘),
array(‘北京‘,‘上海‘,‘深圳‘)
);
//按顺序输出
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j];//name age address 北京 上海 深圳
}
//echo $arr[$i];
}
//foreach遍历
foreach($arr as $item){
foreach($item as $o){
echo $o;//name age address 北京 上海 深圳
}
}
二维数组遍历(关联)
$arr = array(
array(‘name‘=>‘max‘,‘age‘=>18,‘address‘=>‘beijing‘),
array(‘city‘=>‘beijing‘,‘area‘=>‘haidian‘)
);
//for遍历
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j];//undefind offset (没有定义下标)
}
}
//foreach遍历
foreach($arr as $item){
foreach($item as $o){
echo $o;//max 18 beijing beijing haidian
}
}
实现原理
php数组是一种hash表,hash表的一个特点就是查询速度快。
关联数组之所以无法用for循环的遍历,是因为在hash表中并不是按顺序存储的。
以上是关于PHP数组遍历与实现原理的主要内容,如果未能解决你的问题,请参考以下文章
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段