遍历数组

众所周知,一个不可见的数组中的元素是可以通过遍历来进行显示的;
既然说到了数组,就不得不提下数组的含义及分类:
  数组,本质来说就是储存、管理和操作一组变量,属于复合数据类型。存储在数组中的单个值称之为数组的元素,那么我们怎么获取到这个元素的值呢,通常的方法就是通过数组的下标(有的称之为索引或者脚标,都是一个意思,所以不必深究)来得到这个元素的值:
  定义一个数组:
$arr1 = array(0=>'a',1=>'b',2=>'c');  
  注:可能有的同学是刚从javascript过来,对于这种定义数组的格式不是很熟悉,其实都一样,0就代表数组内该数组内第一个元素所关联的下标,=>这个符号可以理解为这个下标所指向的元素,也就是字符串a('a')。其中0在PHP中我们叫做键,而‘a’就是这个0这个键所对应的值。
很容易看出来 这是一个具有三个元素的数组,而且是程序员口中常听到的索引数组,与之对应的还有关联数组:
$arr2 = array('a'=>0,'b'=>1,'c'=>2);
这个就是所谓的关联数组了。不难看出,数组的下标可以是int(整型)类型或者是string(字符串)类型,而且也只可以用这两种类型,可能有的同学会问,负数可不可以,答案是肯定的,既然是整型,自然也包括负数。
对于索引数组,我们可以想到用个很简单的方法来达到遍历的效果,也就是for循环:
【源码】
             for($i=0;$i<count($arr1);$i++)//count($arr1),count 这个函数是用来获取数组长度;
             {
                  echo $arr1[$i];//如果想要清楚的看出数组内所存放元素对应的数据类型,可以将echo $arr1[$i] 替换为 var_dump($arr1[$i]);
             }
这样我们就可以把arr1变量中所存储的数组内的所有元素显示出来 : abc                                                   (由于网络原因不能上传图片,还望各位见谅)
我们也看到了 对于这种像下标为:0,1,2这样有规律的索引数组,我们可以利用for循环或者是while循环很简单的实现遍历,那如果不是这样有规律的呢或者是以字符串为下标的数组我们还可以使用这样的方法吗?答案是肯定的,下面我们以$arr2为例:
【源码】 
            for($i=0;$i<$count($arr2);$i++)
            {
                  echo current ($arr2);//
                  next($arr2);
            }
之所以可以使用这个方法是因为在数组内部存在一个类似数组指针的东西,在数组建立好之后默认指向第一个元素。而数组中的很多操作都是针对当前数组指针所指向的元素进行的操作。其中current()这个方法可以获得当前数组指针指向的元素的值,key()可以获得当前数组指针指向元素的键,而next()则可以将当前数组指针向后移动。这也是可以使用这种方法实现遍历的重要原因!
使用这种方法可以很实现关联数组的遍历,同时也可以很轻松地完成索引数组遍历;
针对这个情况,PHP4之中引入了foreach结构,这个语句不单单可以遍历关联数组,也可以遍历索引数组,是PHP中专门遍历数组而设计的语句。
现在我们介绍些这个forech遍历数组的用法:
我们还以$arr2为例:
【源码】
            foreach($arr2 as $value)
            {
                  echo $value;
            }
这个方法也是主流的遍历数组的做法,如果想要在遍历的同时得到元素内值所对应的下标,我们可以把代码改成:
【源码】
            foreach($arr2 as $key => $value)
            {
                 echo $key,$value;
            }
foreach的主要工作原理,是每次获得当前元素的信息,处理完毕后将指针移动到下一个元素,从而实现效果。
除了这两种方法以外还有一种也是很常见的遍历做法,就是利用while、list、和each组合。
list():这个算不上真正的函数,而是PHP的语言结构。使用这个函数可以将一个数组内元素的值赋值给一组变量;
例如:
【源码】
            $arr3 = array(1,2,3);
            list($a,$b,$c)=$arr3;
            echo $a,$b,$c;
输出结果为:123;
使用这个函数有个地方需要注意,就是需要明确数组内元素的个数同时list内变量的个数要与之相同;(当变量个数少于数组内元素个数的时候,会默认从数组内的第一个元素开始,依次给list内变量赋值,如果个数多于数组元素个数将会出现Notice级别提示>>>Undefined offset),而且使用list函数只能针对索引数组起作用哦!;


each()这个函数的意思是获得当前数组指针指向元素的信息(键和值),同时将指针移动到下一个元素。返回值是一个含有4个元素的数组,其中分为关联数组和索引数组部分。
也就是说当一个数组内有3个元素的时候我们使用3次each这个函数并输出也可以看出这个数组内所包含的元素信息。因为总共有3个元素,当我们使用4次each的时候他的返回值则为false。
那就好办了 ,想到了什么呢,没错就是while循环。(while循环的使用方法及格式在此不做赘述)
【源码】
            while(list($key,$value)=each($arr2))
            {
                 echo $key,$value;
            }

顺便留个小问题 list中$key和$value是如何接收each($arr2)中的值的呢?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值