PHP 数组遍历 foreach 语法结构

foreach 语法结构用于遍历数组。 foreach() PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。 语法: foreach (array as $value) statement // 或者: fo
foreach 语法结构用于遍历数组。
 
foreach()
PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。
 
语法:
 
foreach (array as $value)
    statement
// 或者:
foreach (array as $key => $value)
    statement
上述语法中,每次循环将当前单元的值赋给 $value 并且数组内部的指针向前移一步。在第二种语法格式中还将当前单元的键名也会在每次循环中赋给变量 $key。
 
例子:
 
<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $age) {
    echo $age,'<br />';
}
?>
运行该例子输出:
 
18
20
25
使用数组键值
 
<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $key=>$age) {
    echo $key,': ',$age,'<br />';
}
?>
运行例子输出:
 
wang: 18
li: 20
zhang: 25
提示
 
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元,这意味着不需要在 foreach 循环之前调用 reset()。
 
foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。对返回的数组单元的修改也不会影响原数组(见下面例子),但 foreach 循环运行到结束,原数组的内部指针将指向数组的结尾。
 
<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $age) {
    $age = $age+10;
    echo $age,'<br />';
}
// 输出原数组
print_r($arr_age);
?>
运行例子输出:
 
28
30
35
Array ( [wang] => 18 [li] => 20 [zhang] => 25 ) 
要在 foreach 中修改原数组元素,可以通过引用来实现,将上面的例子更改为:
 
<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as &$age) {
    $age = $age+10;
    echo $age,'<br />';
}
// 输出原数组
print_r($arr_age);
?>
运行例子输出:
 
18
20
25
Array ( [wang] => 28 [li] => 30 [zhang] => 35 ) 
遍历多维数组
foreach 语法结构只能用于遍历一维数组,要遍历多维数组,一般是将 foreach 嵌套递归使用或者将原数组分割为一维数组再进行 foreach 遍历。
 
一二维数组混合的例子:
 
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>array("name"=>"小张", "age"=>25));
foreach ($arr_age as $age) {
    if(is_array($age)){
        foreach ( $age as $detail) {
        echo $detail,'<br />';
        }
    } else {
        echo $age,'<br />';
    }
}
?>
运行该例子输出:
 
18
20
小张
25
对多维数组的遍历处理就要根据实际的数据结构而采取最合适的处理方式。
 
延伸预读
 
PHP 数组是通过哈希表(HashTable)表实现的,因此 foreach 遍历数组时是依据元素添加的先后顺序来进行的。如果想按照索引大小遍历,应该使用 for() 循环遍历。
 
for() 循环遍历数组
如果是操作连续键值的数组,也可以采用 for() 循环来遍历数组:
 
<?php
$arr_age = array(18, 20, 25);
$num = count($arr_age);
for($i = 0; $i < $num; $i++){
    echo $arr_age[$i]."<br />";
}
?>
运行例子输出如下:
 
18
20
25
提示
 
也可以用 list() 和 each() 结合来遍历数组,但测试发现效率不如 foreach() 。
 
 
//使用array()语句结构将联系人列表中所有数据声明为一个二维数组,默认下标是顺序数字索引
    $contact1 = array(                                             //定义外层数组
    array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子数组1
    array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子数组2
    array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'),  //子数组3
    array(4,'书某','D公司','重庆市','(023)13579135','sm@php.com')     //子数组4
    );
   //以HTML表格的形式输出二维数组中的每个元素
    echo '<table border="1" width="600" align="center">';
    echo '<caption><h1>联系人列表</h1></caption>';
    echo '<tr bgcolor="#dddddd">';
    echo '<th>编号</th><th>姓名</th><th>公司</th><th>地址</th><th>电话</th><th>EMALL</th>';
    echo '</tr>';
    //使用双层for语句嵌套二维数组$contact1,以HTML表格的形式输出
    //使用外层循环遍历数组$contact1中的行
    for($row=0;$row<count($contact1);$row++)
    {
        echo '<tr>';
        //使用内层循环遍历数组$contact1 中 子数组的每个元素,使用count()函数控制循环次数
        for($col=0;$col<count($contact1[$row]);$col++)
        {
            echo '<td>'.$contact1[$row][$col].'</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
 
 
$contact1 = array(    
//定义外层数组
    array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子数组1
    array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子数组2
    array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'),  //子数组3
    array(4,'书某','D公司','重庆市','(023)13579135','sm@php.com')     //子数组4
    );
 
foreach($contact1 as $key=>$s){
 
//echo  $key;//以每个数组的键值作为表名
foreach($s as $row){
 
echo  $row;
 
 
}
 
 
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

今天在用php进行图片保存输出时候,图片一直显示错误,后面用调试模式下提示:Warning: Cannot modify header information - headers already sent by... 看了一些网上的方法也没解决,最后在php.ini配置output_buffering默认为4096就没有遇到这个错误了: o
ob_start()函数用于打开缓冲区,比如header()函数之前如果就有输出,包括回车/空格/换行/都会有Header had all ready send by的错误,这时可以先用ob_start()打开缓冲区PHP代码的数据块和echo()输出都会进入缓冲区而不会立刻输出.当然打开缓冲区的作用很多,只要
第一种方法:用php的strpos() 函数判断字符串中是否包含某字符串的方法 if(strpos(www.genban.org,genban) !== false){ echo 包含genban; }else{ echo 不包含genban; } 第二种 使用了explode 用explode进行判断PHP判断字符串的包含代码如下: ?php $name = 00
/u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字) /i 表示不区分大小写(如果表达式里面有 a, 那么 A 也是匹配对象) /s 表示将字符串视为单行来匹配
随机生成难点是在于如何避免碰撞,有人说用md5,GUID这些机制啊,当然可以,但是做为账号,看着有乱,而且生成位数也过长。 本方法只需要解决1秒内的并发碰撞就可以,因为固定头部采用的是unixtime时间,精确到秒,超过1秒,这个头部的时间肯定变化了。同时
文实例讲述了PHP页面实现定时跳转的方法,分享给大家供大家参考。具体实现方法如下: php定时跳转我们需要利用header函数输入html或js代码来实现定时跳转,下面我来介绍一个简单的例子 php代码如下: header(refresh:3;url=https://www.genban.org);print(正