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表中并不是按顺序存储的。

原文地址:http://blog.51cto.com/12008764/2141998

时间: 2024-11-08 23:44:35

PHP数组遍历与实现原理的相关文章

java 多维数组遍历

java 多维数组遍历的顺序的性能问题 ps:下图为java多维数组内存分布原理.出自:http://math.hws.edu/javanotes/c7/two-dimensional-array.png 出自:http://www.importnew.com/16742.html

输出 一维数组中最大的数+数组遍历

1 //将数组中最大的数输出 2 //数组遍历 3 int[] arr = new int[]{2,4,1,6,10,11}; 4 System.out.println("输出一维数组 :"); 5 for(int i=0; i<arr.length;i++) 6 { 7 System.out.print(arr[i]+" "); 8 } 9 10 System.out.println(); 11 12 int max = arr[0]; 13 for(int

微信小程序多层嵌套循环,二级数组遍历

小程序中的遍历循环类似于angularJS的遍历. 二级数组遍历有一个坑.二级遍历wx:for循环的时候,需要注意.(代码如下) JS代码: data: { groups: [ [ { title: '狼图腾', cover: '../../img/mineBG.png' }, { title: '狼图腾', cover: '../../img/mineBG.png' }, ], [ { title: '狼图腾', cover: '../../img/mineBG.png' }, ], [ {

iOS中数组遍历的方法及比较

数组遍历是编码中很常见的一种需求,我们来扒一拔iOS里面都有什么样的方法来实现,有什么特点. 因为iOS是兼容C语言的,所以C语言里面的最最常见的for循环遍历是没有问题的. 本文中用的数组是获取的系统的语言数组,大约有30多个数据,虽然还不够模拟大批量的数据,但对于方法的验证是没有问题的了. NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"]; 第一种方法

PHP数组遍历详解

一.PHP数组简介 1.PHP数组的分类 按照下标的不同分为关联数组和索引数组①索引数组:下标从0开始依次增长②关联数组:下标为字符串格式,每个下标字符串与数组的值一一对应,(有点像对象的键值对) 下面详细介绍下索引数组与关联数组 ①.数组中可以同时存在索引数组和关联数组:②.数组中所有的索引数组如果不加指定会去掉关联项,默认增长:关联数组不占索引位     array(1,2,"one"=>3,4,5); //1/2/4/5的索引-->0,1,2,3③.如果关联数组的ke

二维数组遍历

问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 算法分析:可以直接遍历,不过时间复杂度太高,因为有序,可以从左下角查找,也可以从右上角查找. public class Array { //二维数组遍历 public boolean Find(int [][] array,int target) { for(int i = 0; i < array.length; i

2016/1/10 作业 1, 二维数组遍历输出求和 2,转置运算???? 3,九宫格?? 后两个存在问题

1 public class arr1 { 2 3 4 public static void main(String[] args) { 5 // 创建二维数组arr[][],输出二维数组所有元素的和. 6 7 int arr[][]={{1,3,5,7,9},{21,23,25,27,29}, 8 {12,14,16,18},{32,34,36,38}}; 9 int sum=0; 10 System.out.println("二维数组遍历"); 11 // for循环 遍历 求和

转 :asp教程.net c#数组遍历、排序、删除元素、插入、随机元素 数组遍历

asp教程.net c#数组遍历.排序.删除元素.插入.随机元素数组遍历 short[] sts={0,1,100,200};for(int i=0;i<sts.lenght;i++){  if(sts[i]>50) {  .....  }} 数组随机元素 public  hashtable  noorder(int count)         {             arraylist mylist = new arraylist();             hashtable ha

Javascript数组和php数组遍历对比介绍

javascripe 和 php 的数组都是 map 类型的,也就是 key 值类型不限制那种.下面我对比下俩种数组的遍历方式: 1 : javascript数组遍历使用了 in 这个操作符,例如 for(key in arr),则遍历过程中 key 会被赋值为 arr 数组中的key,通过 arr[key] 获取 value. for(key in arr){ console.log("arr[" + key + "] = " + arr[key]); } 2:p