设为首页 收藏本站
查看: 760|回复: 0

[经验分享] 第十课:PHP中遍历数组

[复制链接]
发表于 2017-4-3 06:24:51 | 显示全部楼层 |阅读模式
第十课:PHP中遍历数组

来源:PHP中文社区

  上节课我们认识到了数组的优越性,这节课我们将学习怎样遍历数组中的数据。这种操作数组方法的应用是非常普遍的,我相信你会掌握得很好。

    比如你的网站存有大量的网址数据,你想在一个页面显示门户网站网址,这些数据已经保存到了一个数组变量$url里,那么怎样把这些数据一个一个输出到网页里呢?你还想象上节课那样一个一个echo输出吗?别忘了数据量是非常大而且数据的个数是经常变化的噢。PHP当然会有简单的办法,先看一个例子10-1:
  

  

<?php
$url = array('新浪'=>'www.sina.com',
'雅虎'=>'www.yahoo.com',
'网易'=>'www.163.com',
'腾讯'=>'www.qq.com',
'百度'=>'www.baidu.com'
);
foreach (  $url as $link ) {
echo $link.'<br><br>';
}
?>



  

   上面的代码中我们用到了foreach语句,这是一个用来遍历数组中数据的最简单有效的方法。

  foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。


  第一种语法:

  foreach (array_expression as $value) statement

  这种格式遍历给定的 array_expression 数组,as 是关键词。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。statement是后续操作,如果有多个语句,你可以象上例那样采用大括号包含。

  上例中,我们循环读取数组$url中的每个单元,并且每次都把该单元的值赋值给变量$link,再echo打印输出这个$link的值,然后再进行下一次循环直到数组中不再有数据。

  你动手试了吗?如果你试了,看到输出结果是不是觉得很有趣呢?我知道一会儿你就又有疑问了:为什么没有“新浪”“网易”这样的站名呢?要怎样做才能得到呢?

  在$url数组定义中,“新浪”“网易”等都是作的键名而不是数组的值,我们的第一种语法只是循环取得数组中每个值。如果要得到数组的键名,可以采用第二种语法:

  第二种语法:

  foreach (array_expression as $key => $value) statement

  第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量 $key。

  例如10-2:


  

<?php
$url = array('新浪'=>'www.sina.com',
'雅虎'=>'www.yahoo.com',
'网易'=>'www.163.com',
'腾讯'=>'www.qq.com',
'百度'=>'www.baidu.com'
);
foreach (  $url as $site => $link ) {
echo "<a href=http://$link>$site</a><br><br>";
}
?>
 $site得到键值(如“新浪”),$link得到该单元的值(如“www.sina.com”),我在中间夹了一些HTML代码,相信你会看懂的。下面我再加点东西你能看懂吗?例10-3:  

  

<?php
$url = array('新浪'=>'www.sina.com',
'雅虎'=>'www.yahoo.com',
'网易'=>'www.163.com',
'腾讯'=>'www.qq.com',
'百度'=>'www.baidu.com'
);
$n = 0;
foreach (  $url as $site => $link ) {
++$n ;
echo "第 $n  名:<a href=http://$link>$site</a><br><br>";
}
?>




注:当
foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。

注:此外注意
foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有 each() 的构造,原数组指针也没有变,数组单元的值也不受影响。

注:foreach
不支持用“@”来禁止错误信息的能力。

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359308-1-1.html 上篇帖子: PHP+FlashPaper文库系统方案简析 下篇帖子: PHP多台服务器跨域SESSION共享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表