ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3393|回复: 8

[细说PHP] 第9章PHP中的数组与数据结构--定义与遍历

[复制链接]
发表于 2013-8-2 10:44:11 | 显示全部楼层 |阅读模式
创建一个三维数组存储三个部门的工资表

<?php
        $wage = array(
                "市场部" => array(
                        array(1, "高某", "市场部经理", 5000.00),
                        array(2, "洛某", "职员", 3000.00),
                        array(3, "峰某", "职员", 2400.00),
                ),
               
                "产品部" => array(
                        array(1, "李某", "产品部经理", 6000.00),
                        array(2, "周某", "职员", 4000.00),
                        array(3, "吴某", "职员", 3200.00)
                ),
               
                "财务部" => array(
                        array(1, "郑某", "财务部经理", 4500.00),
                        array(2, "王某", "职员", 2000.00),
                        array(3, "冯某", "职员", 1500.00)
                )
        );
        
        print_r( $wage["市场部"] );                        //访问数组$wage中的第一个元素
        print_r( $wage["市场部"][1] );                //访问数组$wage["市场部"]中的第二个元素
        print_r( $wage["市场部"][1][3] );        //访问数组$wage["市场部"][1]中的第四个元素,输出3000
回复

使用道具 举报

 楼主| 发表于 2013-8-2 11:17:42 | 显示全部楼层
循环输出数组中的各个元素

<?php
    //使用array()语句将联系人列表中第一条记录声明成一维数组$contact
        $contact = array( 1, "高某", "A公司", "北京市", "(010)98765432", "gao@brophp.com" );
   
        //以表格的形式输出一维数组中的每个元素
        echo '<table border="1" width="600" align="center">';                
        echo '<caption><h1>联系人列表</h1></caption>';                   
        echo '<tr bgcolor="#DDDDDD">';                                    
   
        //以html的th标记输出表格的字段名称
        echo '<th>编号</th><th>姓名</th><th>公司</th><th>地址</th><th>电话</th><th>EMAIL</th>';
        echo '</tr><tr>';   
       
        //使用for循环输出一维数组中的元素
        for($i=0; $i < count($contact); $i++) {                              
                echo '<td> '.$contact[$i].' </td>';                        //循环一次输出数组中的一个元素
        }
        echo '</tr></table>';                                             
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-2 11:26:24 | 显示全部楼层
双层for循环嵌套遍历二位数组

<?php
    //使用array()语句结构将联系人列表中所有数据声明为一个二维数组,默认下标是顺序数字索引
        $contact = array(                                                                                 //定义外层数组
                   array(1, '高某', 'A公司', '北京市', '(010)98765432', 'gm@linux.com'),         //子数组 1
                   array(2, '洛某', 'B公司', '上海市', '(021)12345678', '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>EMAIL</th>';
        echo '</tr>';
       
    //使用双层for语句嵌套遍历二维数组$contact,以HTML表格的行列形式输出
        //使用外层循环遍历数组$contact中的行
        for($row=0; $row < count($contact); $row++) {       
                echo '<tr>';                                
        
                //使用内层循环遍历数组$contact中子数组的每个元素,使用count()函数控制循环次数
                for($col=0; $col < count($contact[$row]); $col++) {  
                        echo '<td> '.$contact[$row][$col].' </td>';         //使用两个索引值输出二维数组中每个元素
                }
                echo '</tr>';                                    
        }
        echo '</table>';                                     
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-2 11:44:09 | 显示全部楼层
foreach循环输出一维数组的元素

<?php
    //使用array()结构声明一个无序的一维数组$contact
        $contact = array( 1, 14=>"高某", "A公司", "北京市", 14=>"(010)98765432", "gao@brophp.com" );
        //声明一个变量$num初始值为0,作为循环的计数使用
        $num = 0;                                   
   
        //使用foreach语句遍历一维数组$contact,将数组中每个元素输出
        foreach($contact as $value){
                echo "在数组\$contact中第 $num 元素是:$value <br>";    //每次循环输出一次当前元素
                $num++;                                                                                     //计数变量累加
        }
?>


使用foreach的第二种格式,可以获取数组元素的键/值

<?php
    //声明一个一维的关联数组$contact, 使用“=>”运算符指定了每个元素的字符串下标
        $contact = array(
                        "ID" => 1,
                        "姓名" => "高某",
                        "公司" => "A公司",
                        "地址" => "北京市",
                        "电话" => "(010)98765432",
                        "EMAIL" => "gao@brophp.com"
                );
       
        //以HTML列表的方式输出数组中每个元素的信息
        echo '<dl>一个联系人信息:';
       
        foreach( $contact as $key => $value ){          //使用foreach的第二种格式,可以获取数组元素的键/值
                echo "<dd> $key : $value </dd>";                 //输出每个元素的键/值对
        }
       
        echo '</dl>';

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-2 12:03:53 | 显示全部楼层
使用三层foreach语句嵌套遍历三维数组,输出三个表格

<?php
    //将三个部门的工资表格存储在三维数组$wage中
        $wage = array(
                        "市场部" => array(
                                array(1, "高某", "市场部经理", 5000.00),
                                array(2, "洛某", "职员", 3000.00),
                                array(3, "峰某", "职员", 2400.00),
                        ),
                        "产品部" => array(
                                array(1, "李某", "产品部经理", 6000.00),
                                array(2, "周某", "职员", 4000.00),
                                array(3, "吴某", "职员", 3200.00)
                        ),
                        "财务部" => array(
                                array(1, "郑某", "财务部经理", 4500.00),
                                array(2, "王某", "职员", 2000.00),
                                array(3, "冯某", "职员", 1500.00)
                        )
                );

        //使用三层foreach语句嵌套遍历三维数组,输出三个表格
        foreach( $wage as $sector => $table ) {               //最外层foreach语句遍历出三个表格,遍历出键和值
                echo '<table border="1" width="600" align="center">';
                echo '<caption><h2> '.$sector.'10月份工资表 </h2></caption>';  
                echo '<tr bgcolor="#dddddd"><th>编号</th><th>姓名</th><th>职务</th><th>工资</th></tr>';
               
                foreach( $table as $row ) {                     //中层foreach语句遍历出每个表格中的行
                        echo '<tr>';
       
                        foreach($row as $col) {                                //内层foreach语句遍历出每条记录中的列值
                                echo '<td> '.$col.' </td>';                 
                        }
                        echo '</tr>';
                }
                echo '</table><br>';
        }


回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 10:34:18 | 显示全部楼层
each()函数

<?php
    //声明一个数组$contact作为each()函数的参数
        $contact = array("ID" => 1, "姓名" => "高某", "公司" => "A公司", "地址" => "北京市" );
       
        $id = each($contact);                 //返回数组$contact中第一个元素的键/值对,是带有4个元素的数组
        print_r($id);                       //输出数组$id:Array ( [1] => 1 [value] => 1 [0] => ID [key] => ID)

        $name = each($contact);         //返回数组$contact中第二个元素的键/值对,是带有4个元素的数组
        print_r($name);                       //输出Array ( [1] => 高某 [value] => 高某 [0] => 姓名 [key] => 姓名)

        $company = each($contact);         //返回数组$contact中第三个元素的键/值对,是带有4个元素的数组
        print_r($company);                     //输出:Array ( [1]=>A公司 [value]=>A公司 [0]=>公司 [key]=>公司)

        $address = each($contact);         //返回数组$contact中第四个元素的键/值对,是带有4个元素的数组
        print_r($address);              //输出:Array ( [1] =>北京市[value] =>北京市[0] =>地址[key] =>地址)

        $no = each($contact);            //已经到数组$contact的末端,返回false
        var_dump($no);                       //输出$no的值:bool(false)
?>

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 10:49:28 | 显示全部楼层
list()函数

<?php
        $info = array('coffee', 'brown', 'caffeine');           //声明一个索引数组$info

        list($drink, $color, $power) = $info;                              //将数组中的所有元素转为变量
        echo "$drink is $color and $power makes it special.\n";        //三个变量值是数组中三个元素的值

        list($drink, , $power) = $info;                                                   //将数组中的部分元素转换为变量
        echo "$drink has $power.\n";                                                      //两个变量值是数组中前两个元素的值
       
        list( , , $power) = $info;                                                         //跳过前两个只将数组中第三个元素转为变量
        echo "I need $power!\n";                                                             //输出的一个变量值是数组中第三个元素的值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 11:02:56 | 显示全部楼层
while联合list()、each()循环遍历数组

<?php
    //声明一个一维的关联数组$contact
        $contact = array("ID" => 1,
                        "姓名" => "高某",
                        "公司" => "A公司",
                        "地址" => "北京市",
                        "电话" => "(010)98765432",
                        "EMAIL" => "gao@brophp.com"
                );
       
        //以HTML列表的方式输出数组中每个元素的信息
        echo '<dl>一个联系人信息:';

        while( list($key, $value) = each($contact) ){ //将foreach语句改写成while、list()和each()组合
                echo "<dd> $key : $value </dd>";                     //输出每个元素的键/值对
        }

        echo '</dl>';
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 11:09:41 | 显示全部楼层
使用数组的内部指针控制函数遍历数组

<?php
    //声明一个一维的关联数组$contact, 使用“=>”运算符指定了每个元素的字符串下标
        $contact = array(
                        "ID" => 1,
                        "姓名" => "高某",
                        "公司" => "A公司",
                        "地址" => "北京市",
                        "电话" => "(010)98765432",
                        "EMAIL" => "gao@brophp.com"
                );
               
        //数组刚声明时,数组指针在数组中第一个元素位置
        //使用key()和current()函数传入数组$contact,返回数组中当前元素的键和值
        echo '第一个元素:'.key($contact).' => '.current($contact).'<br>';                  //第一个元素
        echo '第一个元素:'.key($contact).' => '.current($contact).'<br>';                  //数组指针没动
       
        next($contact);         //将数组$contact中的指针向下一个元素移动一次,指向第二个元素的位置
        next($contact);          //将数组$contact中的指针向再下一个元素移动一次,指向第三个元素的位置
        echo '第三个元素:'.key($contact).' => '.current($contact).'<br>';                  //第三个元素
       
        end($contact);          //再将数组$contact中的指针移动到最后,指向最后一个元素
        echo '最后一个元素:'.key($contact).' => '.current($contact).'<br>';                 //最后一个元素
       
        prev($contact);           //将数组$contact中的指针倒回一位,指向最后第二个元素
        echo '最后第二个元素:'.key($contact).' => '.current($contact).'<br>';                 //最后第二个元素
       
        reset($contact);          //再将数组$contact中的指针重置到第一个元素的位置,指向第一个元素
        echo '又回到了第一个元素:'.key($contact).' => '.current($contact).'<br>';         //第一个元素
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-18 20:46 , Processed in 0.036563 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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