PHP 遍历数组的方法汇总

PHP 遍历数组的方法汇总

大家好,又见面了,我是全栈君。

1. foreach()

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

#example1:

  1. <?php
  2. $colors= array(‘red’,’blue’,’green’,’yellow’);
  3. foreach ($colorsas$color){
  4. echo “Do you like $color? <br />”;
  5. }
  6. ?>

显示结果:

Do you like red? 
Do you like blue? 
Do you like green? 
Do you like yellow?

2. while()

while() 通常和 list(),each()配合使用。

#example2:

  1. <?php
  2. $colors= array(‘red’,’blue’,’green’,’yellow’);
  3. while(list($key,$val)= each($colors)) {
  4. echo “Other list of $val.<br />”;
  5. }
  6. ?>

显示结果:

Other list of red. 
Other list of blue. 
Other list of green. 
Other list of yellow.

3. for()

#example3:

  1. <?php
  2. $arr= array (“0″=> “zero”,”1″=> “one”,”2″=> “two”);
  3. for ($i= 0;$i< count($arr); $i++){
  4. $str= $arr[$i];
  5. echo “the number is $str.<br />”;
  6. }
  7. ?>

显示结果:

the number is zero. 
the number is one. 
the number is two.

========= 以下是函数介绍 ==========

key()

mixed key(array input_array)

key()函数返回input_array中位于当前指针位置的键元素。

#example4

  1. <?php
  2. $capitals= array(“Ohio”=> “Columbus”,”Towa”=> “Des Moines”,”Arizona”=> “Phoenix”);
  3. echo “<p>Can you name the capitals of these states?</p>”;
  4. while($key= key($capitals)) {
  5. echo $key.”<br />”;
  6. next($capitals);
  7. //每个key()调用不会推进指针。为此要使用next()函数
  8. }
  9. ?>

显示结果:

Can you name the capitals of these states? 
Ohio 
Towa 
Arizona

reset()

mixed reset(array input_array)

reset()函数用来将input_array的指针设置回数组的开始位置。如果需要在一个脚本中多次查看或处理同一个数组,就经常使用这个函数,另外这个函数还常用于排序结束时。

#example5 - 在#example1上追加代码

  1. <?php
  2. $colors= array(‘red’,’blue’,’green’,’yellow’);
  3. foreach ($colorsas$color){
  4. echo “Do you like $color? <br />”;
  5. }
  6. reset($colors);
  7. while(list($key,$val)= each($colors)) {
  8. echo “$key=> $val<br />”;
  9. }
  10. ?>

显示结果:

Do you like red? 
Do you like blue? 
Do you like green? 
Do you like yellow? 
0 => red 
1 => blue 
2 => green 
3 => yellow

注意:将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上例中如果我们在循环内部将 $colors 赋给了另一个变量的话将会导致无限循环。 
例如将 $s1 = $colors; 添加到while循环内,再次执行代码,浏览器就会无休止地显示结果。

each()

array each(array input_array)

each()函数返回输入数组当前键/值对,并将指针推进一个位置。返回的数组包含四个键,键0和key包含键名,而键1和value包含相应的数据。如果执行each()前指针位于数组末尾,则返回FALSE。

#example6

  1. <?php
  2. $capitals= array(“Ohio”=> “Columbus”,”Towa”=> “Des Moines”,”Arizona”=> “Phoenix”);
  3. $s1= each($capitals);
  4. print_r($s1);
  5. ?>

显示结果:

Array ( [1] => Columbus [value] => Columbus [0] => Ohio [key] => Ohio )

current(),next(),prev(),end()

mixed current(array target_array)

current()函数返回位于target_array数组当前指针位置的数组值。与next()、prev()、和end()函数不同,current()不移动指针。 
next()函数返回紧接着放在当前数组指针的下一个位置的数组值。 
prev()函数返回位于当前指针的前一个位置的数组值,如果指针本来就位于数组的第一个位置,则返回FALSE。 
end()函数将指针移向target_array的最后一个位置,并返回最后一个元素。

#example7

  1. <?php
  2. $fruits= array(“apple”,”orange”,”banana”);
  3. $fruit= current($fruits); //return “apple”
  4. echo $fruit.”<br />”;
  5. $fruit= next($fruits); //return “orange”
  6. echo $fruit.”<br />”;
  7. $fruit= prev($fruits); //return “apple”
  8. echo $fruit.”<br />”;
  9. $fruit= end($fruits); //return “banana”
  10. echo $fruit.”<br />”;
  11. ?>

显示结果:

apple 
orange 
apple 
banana

=========== 下面来测试三种遍历数组的速度 ===========

一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间。

测试环境: 
Intel Core Due2 2GHz 
2GB 1067MHz DDR3 
Mac OS X 10.5.7 
Apache 2.0.59 
MySQL 5.0.41 
PHP 5.2.6

#example8

  1. <?php
  2. $arr= array();
  3. for($i= 0; $i< 50000; $i++){
  4. $arr[]= $i*rand(1000,9999);
  5. }
  6. function GetRunTime()
  7. {
  8. list($usec,$sec)=explode(” “,microtime());
  9. return ((float)$usec+(float)$sec);
  10. }
  11. ######################################
  12. $time_start= GetRunTime();
  13. for($i= 0; $i< count($arr); $i++){
  14. $str= $arr[$i];
  15. }
  16. $time_end= GetRunTime();
  17. $time_used= $time_end- $time_start;
  18. echo ‘Used time of for:’.round($time_used, 7).'(s)<br /><br />’;
  19. unset($str, $time_start, $time_end, $time_used);
  20. ######################################
  21. $time_start= GetRunTime();
  22. while(list($key, $val)= each($arr)){
  23. $str= $val;
  24. }
  25. $time_end= GetRunTime();
  26. $time_used= $time_end- $time_start;
  27. echo ‘Used time of while:’.round($time_used, 7).'(s)<br /><br />’;
  28. unset($str, $key, $val, $time_start, $time_end, $time_used);
  29. ######################################
  30. $time_start= GetRunTime();
  31. foreach($arr as$key=> $val){
  32. $str= $val;
  33. }
  34. $time_end= GetRunTime();
  35. $time_used= $time_end- $time_start;
  36. echo ‘Used time of foreach:’.round($time_used, 7).'(s)<br /><br />’;
  37. ?>

测试结果:

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还可以遍历类的属性。

本文转自博客园知识天地的博客,原文链接:PHP 遍历数组的方法汇总,如需转载请自行联系原博主。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107831.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java面试题高级_Java高级面试题整理(附答案)[通俗易懂]

    java面试题高级_Java高级面试题整理(附答案)[通俗易懂]javajava8java开发Java高级面试题整理(附答案)这是我收集的10道高级Java面试问题列表。这些问题主要来自Java核心部分,不涉及JavaEE相关问题。你可能知道这些棘手的Java问题的答案,或者觉得这些不足以挑战你的Java知识,但这些问题都是容易在各种Java面试中被问到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。1…

    2022年7月18日
    14
  • 驱动程序模型:wddm2.0_编写一个简单的驱动

    驱动程序模型:wddm2.0_编写一个简单的驱动WDF驱动程序开发1.引言设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作。设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设计和开发稳定高效的驱动程序具有重要意义。WDF(WindowsDriverFoundation)是微软提出的下一代全新的驱动程序模型,它是在WDM(windowsDriverModel)…

    2022年9月1日
    6
  • 微信公众号之自定义菜单

    微信公众号之自定义菜单今天是“微信开发会客厅”栏目的第一期,我的微信自媒体“刘琪的商业观察”有幸请到了几位自定义菜单的“尝鲜者”,请他们谈谈对。 “订酒店”公众号负责人、快捷酒店管家产品经理朱坤的看法比较具有典型性,他表示:“如果说是惊喜还谈不上,毕竟微信团队的人太少了,而且事情非常多,所以开放和相关功能的开发肯定是慢慢来的。不过,这也传递了一个很重要的信号与信心,那就是,每个公号都会成为一个独立的具体

    2022年5月13日
    82
  • Linux中搭建DNS服务器

    Linux中搭建DNS服务器目录DNS域传送漏洞域名空间结构DNS解析过程各种解析记录DNS服务器的安装与部署主从DNS服务器的搭建:转发DNS服务器的配置DNSDNS(DomainNameService)域名解析服务,就是将域名和ip之间做相应的转换,利用TCP和UDP的53号端口DNS系统作用:正向解析:根据域名查找对应的ip地址 反向解析:根据ip地址查…

    2022年6月4日
    29
  • Python文件名后缀_python判断文件后缀

    Python文件名后缀_python判断文件后缀转自:python获取文件后缀名的方法_qingfengxd1的博客-CSDN博客_python获取文件后缀获取文件的后缀名有好几种方法:第一种:splittext()方法os.path.splittext(path)[-1]第二种:endswith()方法path=”test_user_info.py”bool=path.endswith(“.py”)print(bool)第三种:判断后缀名是否在字符串中(这种会存在误判,若是.pyx后缀,一样会打印True,前面两种不会)path=”te

    2022年9月23日
    3
  • 约瑟夫环——公式法(递推公式)

    约瑟夫环——公式法(递推公式)约瑟夫问题约瑟夫问题是个有名的问题:N个人围成一圈,第一个从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个个人,把他们叫做A、B、C围成一圈,从A开始报数,报2的人被杀掉。A开始报数,他报1。侥幸逃过一劫。然后轮到B报数,他报2。非常惨,他被杀了C接着从1开始报数然后轮到A报数,他报2。也被杀死了。最终胜利者是C解决方案普通解

    2022年5月4日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号