PHP之数组遍历

       数组在PHP中是一个非常强大的武器,用起来方便、容易,由于使用起来异常灵活,用它就可以实现数据结构中的链表、栈、队列、堆以及所谓的字典、集合等,也可以转换成XML格式。

      1、使用for

      for语句遍历数组不是一个好选择,一般不会用,局限性太大,因为数组的下标很多时候不连续,或者是既有整数下标又有字符串下标,但存在这么一个情况,恰好是索引数组,且它的下标是连续的,那么这也是一种方法。

<?php
    $array = array('a', 'b', 'c', 'd', 'e');
    $size = count($array);    //取得数组单元个数
    for($i=0; $i<$size; $i++)
        echo $array[$i].'<br/>';

     2、使用foreach

      foreach比for更方便、灵活,一般用它,使用foreach($arr_name as $value)时,会将数组的元素赋给as关键字后面的变量,当然这是针对一维数组而言,还可以将元素所在的键名取到,如下方式foreach($arr_name as $key=>$value)即可。

<?php
    $array = array('os'=>'Linux', 'server'=>'Apache', 'db'=>'mysql', 'language'=>'PHP');
    foreach($array as $key=>$value){
        echo 'key: '.$key.' --- value: '.$value.'<br/>';
    }

      运行结果:

      

      3、list、each、while函数结合

      each函数每作用于数组一次,指向内部元素的指针遍向后挪动一个单元,每次each返回一个固定格式的键/值对数组,具体是(1=>值, 'value'=>值, 0=>键, 'key'=>键)。下一次each作用时将移动到下一个元素,示例

<?php    
    $arr = array('one'=>'a','two'=>'b', 'three'=>'c');
    $lst = each($arr);    
    echo 'each=> <pre>';
    var_dump($lst); 

      效果

      

      list函数的作用是,赋给它一个数组变量,它会将该数组中的以整数为键值的元素按键值从小到大的顺序赋给自己的参数,如果参数不够填满参数为止,如果数组中值不够,则参数被赋为空值,代码接上

    list($key, $val) = $lst;
    echo '<br/>';
    echo 'key: '.$key.' value: '.$val.'<br/>';

      效果

      

      还有,如果不想接受前面的元素,还可以用逗号分隔、不传变量的形式跳过去,具体如

    $array = array('a', 'b', 'c');
    list(, , $c) = $array;     //$c的值为'c'

      $lst数组变量中的值,键值为整数的分别是前面的1=>'a'和后面的0=>'one,list函数的好处是即便键值小的、排在后边元素也会按照从小到大的顺序赋给list函数中的从前到后的参数。

      由于each不循环数组,每each作用一下只移动一下指针,到数组末尾返回值为false,于是放在while中就最合适不过了

     

<?php
    $arr = array('one'=>'a','two'=>'b', 'three'=>'c');
    while(list($key, $val) = each($arr)){
        echo $key.' => '.$val.'<br/>';
    }

      效果

     

      4、使用数组内部指针移动函数

      数组内部指针默认指向数组中的第一个元素,函数大致有,current():返回当前指针指向数组中位置的元素值;key():返回当前指针指向数组中位置的元素键;next():将指针移动到下一个元素位置;prev():将指针移动到前一个元素位置;reset():将数组指针一到那个到数组第一个元素的位置;end():将数组指针移动到数组最后一个元素的位置。它们作用的参数均为数组变量本身,而结合do...while又可实现数组的顺序和逆序遍历。

     

<?php
    echo 'key:'.key($arr).' current:'.current($arr).'<br/>';  //当前键和值,默认指向数组第一个元素
    next($arr);  //后移一个,指向第二个元素
    echo 'key:'.key($arr).' current:'.current($arr).'<br/>';  //当前键和值
    next($arr);   //再后移一个,指向第三个元素
    echo 'key:'.key($arr).' current:'.current($arr).'<br/>';  //当前键和值
    prev($arr);   //前移一个,指向第二个元素
    echo 'key:'.key($arr).' current:'.current($arr).'<br/>';  //当前键和值
    end($arr);    //移动到数组最后一个元素
    echo 'key:'.key($arr).' current:'.current($arr).'<br/>';  //当前键和值
    reset($arr);  //移动到数组第一个元素
    echo 'key:'.key($arr).' current:'.current($arr).'<br/>';  //当前键和值

      效果

      

      

原文地址:https://www.cnblogs.com/lazycat-cz/p/4018704.html