• 遍历php数组的几种方法


    第一、foreach()

    foreach()是一个用来遍历数组中数据的最简单有效的方法。

    <?php 
        $urls= array('aaa','bbb','ccc','ddd'); 
        foreach ($urls as $url){ 
          echo "This Site url is $url! <br />"; 
        } 
    ?>

    显示结果:

    This Site url is aaa
    This Site url is bbb
    This Site url is ccc
    This Site url is ddd

    第二、while() 和 list(),each()配合使用。

    <?php 
        $urls= array('aaa','bbb','ccc','ddd'); 
        while(list($key,$val)= each($urls)) { 
          echo "This Site url is $val.<br />"; 
        } 
    ?> 

    显示结果:

    This Site url is aaa
    This Site url is bbb
    This Site url is ccc
    This Site url is ddd

    第三、for()运用for遍历数组

    <?php 
        $urls= array('aaa','bbb','ccc','ddd'); 
        for ($i= 0;$i< count($urls); $i++){ 
          $str= $urls[$i]; 
          echo "This Site url is $str.<br />"; 
        } 
    ?> 

    显示结果:

    This Site url is aaa
    This Site url is bbb
    This Site url is ccc
    This Site url is ddd

    有时候有人也在问这几种遍历数组的方法哪个更快捷些呢,下面做个简单的测试就明白了
    =========== 下面来测试三种遍历数组的速度 ===========
    一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间。

    <?php 
      $arr= array(); 
      for($i= 0; $i< 50000; $i++){ 
      $arr[]= $i*rand(1000,9999); 
      } 
      function GetRunTime() 
      { 
      list($usec,$sec)=explode(" ",microtime()); 
      return ((float)$usec+(float)$sec); 
      } 
      ###################################### 
      $time_start= GetRunTime(); 
      for($i= 0; $i< count($arr); $i++){ 
      $str= $arr[$i]; 
      } 
      $time_end= GetRunTime(); 
      $time_used= $time_end- $time_start; 
      echo 'Used time of for:'.round($time_used, 7).'(s)<br /><br />'; 
      unset($str, $time_start, $time_end, $time_used); 
      ###################################### 
      $time_start= GetRunTime(); 
      while(list($key, $val)= each($arr)){ 
      $str= $val; 
      } 
      $time_end= GetRunTime(); 
      $time_used= $time_end- $time_start; 
      echo 'Used time of while:'.round($time_used, 7).'(s)<br /><br />'; 
      unset($str, $key, $val, $time_start, $time_end, $time_used); 
      ###################################### 
      $time_start= GetRunTime(); 
      foreach($arr as$key=> $val){ 
      $str= $val; 
      } 
      $time_end= GetRunTime(); 
      $time_used= $time_end- $time_start; 
      echo 'Used time of foreach:'.round($time_used, 7).'(s)<br /><br />'; 
      ?> 

    测试结果:

    Used time of for:0.0228429(s)
    Used time of while:0.0544658(s)
    Used time of foreach:0.0085628(s)

    经过反复多次测试,结果表明,对于遍历同样一个数组,foreach速度最快,最慢的则是while。从原理上来看,foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。原因应该是,foreach是PHP内部实现,而while是通用的循环结构。所以,在通常应用中foreach简单,而且效率高。在PHP5下,foreach还可以遍历类的属性。

    当然和和foreach一样也可以是用n个同样的方式嵌套遍历多维数组。虽然while遍历数组的结果和freach语句相同,但这两种方法是有区别的。在使用while语句遍历数组之后,each()语句已经将传入的数组参数内部指针指向了数组末端。当再次使用while语句遍历同一个数组时,数组指针已经在数组的末端,each()语句直接返回FALSE,while语句不会被执行循环。只有在while语句执行之前调用reset()函数,重新将数组指针指定第一个元素。而foreach语句会自动重置数组的指针位置,当foreach开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在foreach循环前调用reset()函数。

  • 相关阅读:
    10 个雷人的注释,就怕你不敢用!
    Java 14 之模式匹配,非常赞的一个新特性!
    poj 3661 Running(区间dp)
    LightOJ
    hdu 5540 Secrete Master Plan(水)
    hdu 5584 LCM Walk(数学推导公式,规律)
    hdu 5583 Kingdom of Black and White(模拟,技巧)
    hdu 5578 Friendship of Frog(multiset的应用)
    hdu 5586 Sum(dp+技巧)
    hdu 5585 Numbers
  • 原文地址:https://www.cnblogs.com/imnzq/p/6566439.html
Copyright © 2020-2023  润新知