第十课: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
不支持用“@”来禁止错误信息的能力。
分享到:
相关推荐
第一种仅遍历数组值,如`foreach ($array as $value)`,第二种同时获取键和值,如`foreach ($array as $key => $value)`。例如: ```php $a = array(10, 20, 30); foreach ($a as $k => $v) { echo "$k => $v ...
在这个函数中,我们初始化最大值为数组的第一个元素,然后遍历数组的其余部分。如果发现比当前最大值更大的元素,我们就更新最大值和最大值的索引。 【MySQL数据库连接】 使用PHP连接MySQL数据库需要使用`mysqli`...
`array_walk` 函数遍历数组中的每个元素,将每个元素传递给用户自定义的回调函数,常用于对数组中的数据进行操作或处理。 ### 6. aspell_check: 拼写检查 `aspell_check` 函数用于检查字符串中的拼写错误,返回...
- `foreach` 或 `for` 循环可以用来遍历数组键名并获取对应的值。 **6. 字符串截取** - **代码示例:** ```php $so = "abcdefg"; echo " " . substr($so, 1); ``` - **知识点解析:** - `substr($...
`shuffle()`函数会直接修改原数组,无需返回值,因此使用后可以直接遍历数组查看随机效果。 如果你对其他PHP数组相关的随机操作感兴趣,这里推荐几个相关的函数和话题: 1. `array_rand()`:此函数可以随机选取...
第一种方式是只遍历数组的值: ```php foreach ($array_variable as $value) { // 代码执行部分 } ``` 第二种方式是遍历数组时同时获取键和值: ```php foreach ($array_variable as $key => $value) { // 代码...
`foreach`循环通常比`while`和`for`循环更高效,适用于遍历数组和集合。 9. **单引号字符串引用**: 使用单引号引用字符串可以略微提升效率,因为双引号会尝试解析其中的变量。 10. **简洁的递增操作**: `i +=...
这种方法涉及到计算总页数和当前页的起始索引,然后遍历数组输出指定页的数据。以下是这种方法的示例代码: ```php <?php $arr_click = array( array('clicks' => 3, 'clickDate' => '2010-10-11'), array('...
- **基于数组的循环**:`{% for user in users %}` 会遍历数组`users`,对每个元素执行循环体内的代码。 - **基于数字的循环**:`{% for i in 0..10 %}` 会从0到10(包含0和10)进行循环。 - **基于字母的循环**:`{...