PHP数组的遍历

使用for语句循环遍历数组

在PHP中,不仅可以指定非连续的数字索引值,而且还存在以字符串为下表的关联数组。所以在php中很少使用for语句循环来遍历数组。使用for语句遍历连续数字索引的一维数组。count()函数获取数组的长度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
header("Content-type:text/html;charset=utf-8");
//使用array()语句将联系人列表中第一条记录声明称一维数组$contact
$contact = array(
    array(1,"高某","A公司","北京市","(010)98765432","gao@qq.com"),
    array(2,"洛某","B公司","上海市","(021)12345678","lm@qq.com"),
    array(3,"峰某","C公司","天津市","(022)24680246","fm@qq.com"),
    array(4,"高某","D公司","重庆市","(010)13579135","gm@qq.com")
);
 
//以表格形式输出一维数组
echo '<table border="1" width="600" align="center" ';
echo '<caption><h1>联系人列表</h1></caption>';
echo '<tr bgcolor="#ddd">';
 
//以html的th标记输出表格的字段名称
echo '<th>编号</th><th>姓名</th><th>公司</th><th>地址</th><th>电话</th><th>Email</th>';
echo '</tr><tr>';
 
//使用for循环输出一组数组中的元素
for($row=0; $row<count($contact); $row++){
    echo "<tr>";
    for($col=0;$col<count($contact[$row]);$col++){
        echo '<td>'.$contact[$row][$col]."</td>";
    }
    echo "</tr>";
}
echo '</tr></table>';
使用foreach语句遍历数组

使用foreach语句遍历数组时与数组的下标无关,不管是否是否连续的数字索引数组,还是以字符串为下标的关联数组,都可以使用foreach语句遍历。自php5起,foreach还可以遍历对象。当试图将其用于其他数据类型或者一个未初始化的变量时会产生错误。有两种语法:

1
2
3
foreach(array as $value){
   ……
}
1
2
3
foreach(array as $key => $value){
   ……
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
header("Content-type:text/html;charset=utf-8");
//使用array()语句将联系人列表中第一条记录声明称一维数组$contact
$contact = array(
    "市场部"=>array(
        array(1,"高某","市场部经理",5000.00),
        array(2,"洛某","职员",4000.00),
        array(3,"峰某","职员",3400.00),
    ),
    "产品部"=>array(
        array(1,"李某","市场部经理",6000.00),
        array(2,"周某","职员",4000.00),
        array(3,"吴某","职员",3200.00),
    ),
    "市场部"=>array(
        array(1,"郑某","市场部经理",5000.00),
        array(2,"王某","职员",4000.00),
        array(3,"冯某","职员",3400.00),
    ),
);
 
$num = 0;
 
//使用三层foreach语句遍历三维数组,输出三个表格
foreach($contact as $sector=>$table){
    echo '<table border="1" width="600" align="center"';
    echo '<caption><h2>'.$sector.'</h2></caption>';
    echo '<tr bgcolor="#ddd">
            <th>编号</th><th>姓名</th><th>职务</th>
            <th>工资</th>
        </tr>';
    foreach($table as $row){
        echo '<tr>';
        foreach($row as $col){
            echo '<td>'.$col.'</td>';
        }
        echo '<tr/>';
    }
    echo '</table><br/>';
}
联合使用list()、each()和while循环遍历数组

each()

each()函数需要传递一个数组作为参数,返回数组中当前元素的键/值对,并向后移动数组指针到下一个元素的位置。键/值对被返回为带有4个元素的关联和索引混合的数组,键名分别为0,1,key和value。其中键名0和key对应的值是一样的,是数组元素的键名,1和value则包含有数组元素的值。如果内部指针越过了数组的末端,则each()返回false。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
header("Content-type:text/html;charset=utf-8");
 
$contact = array("ID"=>1,"姓名"=>"高某","公司"=>"公司名","地址"=>"北京市");
 
$id = each($contact);
print_r($id);      //Array ( [1] => 1 [value] => 1 [0] => ID [key] => ID )
echo '<br/>';
$name = each($contact);
print_r($name);     //Array ( [1] => 高某 [value] => 高某 [0] => 姓名 [key] => 姓名 )
echo '<br/>';
$name = each($contact);
print_r($name);     //Array ( [1] => 公司名 [value] => 公司名 [0] => 公司 [key] => 公司 )
echo '<br/>';
$address = each($contact);
print_r($address);      //Array ( [1] => 北京市 [value] => 北京市 [0] => 地址 [key] => 地址 )
echo '<br/>';
$no = each($contact);
print_r($no);

list()

list()用一部操作给一组变量进行赋值,即把数组中的值赋给一些变量,list()技能用于数字索引的数组并假定数字索引从0开始。

list()语句和其他函数在使用上有很大的区别,并不是直接接受一个数组作为参数。而是通过"="运算符以赋值的方式,将数组中每个元素的值,对应的赋给list()函数中的每个参数。list()函数又将它中的每个参数转换为直接可以在脚本中使用的变量。

1
2
3
4
5
6
<?php
header("Content-type:text/html;charset=utf-8");
$info = array('coffee','brown','caffeine');
 
list($drink,$color,$power) = $info;
echo "$drink is $color and $power makes it special.\n";

while循环遍历数组

1
2
3
while(list($key,$value)=each(array)){
  ……
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
header("Content-type:text/html;charset=utf-8");
 
$contact = array(
    'id'=>1,
    "姓名"=>"高某",
    "公司"=>"a公司",
    "地址"=>"北京市",
    "电话"=>"(010)98765432",
    "Email"=>"gao@qqcom"
);
 
echo "<dl>一个联系人信息:</dl>";
while(list($key,$value) = each($contact)){
    echo "<dd>$key:$value</dd>";
}
 
echo "</dl>";
使用数组的内部指针控制函数遍历数组

数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素。弄人是指向数组中第一个元素,通过移动或改变指针的位置,可以访问数组中的任意元素。对于数组指针的控制PHP提供了以下几个内建函数可以利用。

current():取得目前指针位置的内容资料。

key():读取当前指针所指向资料的索引值。

next():将数组中的内部指针移动到下一个单元。

prev():将数组的内部指针倒回一位。

end():将数组的内部指针指向最后一个元素。

reset():将目前指针无条件一直第一个索引位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
header("Content-type:text/html;charset=utf-8");
 
$contact = array(
    'id'=>1,
    "姓名"=>"高某",
    "公司"=>"a公司",
    "地址"=>"北京市",
    "电话"=>"(010)98765432",
    "Email"=>"gao@qqcom"
);
//数组刚声明时,数组指针在数组中第一元素位置
//使用key()和current()函数传入数组$contact,返回数组中当前元素的键和值
echo '第一个元素'.$key($contact).'=>'.current($contact).'<br/>'; //第一个元素
echo '第一个元素'.$key($contact).'=>'.current($contact).'<br/>'//数组指针没动
 
next($contact);
next($contact);
echo '第三个元素:'.key($contact).'=>'.current($contact).'<br/>';
 
end($contact);
echo '最后一个元素'.key($contact).'=>'.current($contact).'<br/>';
 
prev($contact);
echo '最后第二个元素:'.key($contact).'=>'.current($contact).'<br/>';
 
reset($contact);
echo '又回到了第一个元素:'.key($contact).'=>'.current($contact).'<br/>';

PHP超全局变量数组

数组相关处理函数

数组的键/值操作函数
函数array_values()

  array_values()函数的作用是返回数组中所有元素的值。只有一个必选参数——给定的数组,返回一个包含给定数组中所有值的数组,但不保留键名,被返回的数组将使用顺序的数值键重新建立索引,从0开始且以1递增。适合用于数组中元素下表混乱的数组,或者可以将关联数组转化为索引数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
   
header("Content-type:text/html;charset=utf-8");
   
$contact = array(
    'id'=>1,
    "姓名"=>"高某",
    "公司"=>"a公司",
    "地址"=>"北京市",
    "电话"=>"(010)98765432",
    "Email"=>"gao@qqcom"
);
print_r(array_values($contact));  //Array ( [0] => 1 [1] => 高某 [2] => a公司 [3] => 北京市 [4] => (010)98765432 [5] => gao@qqcom )     

函数array_keys()

array_keys()函数的作用是返回数组中所有的键名。本函数中有一个必须参数和两个可选参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
header("Content-type:text/html;charset=utf-8");
 
$contact = array(
    'id'=>1,
    "姓名"=>"高某",
    "公司"=>"a公司",
    "地址"=>"北京市",
    "电话"=>"(010)98765432",
    "Email"=>"gao@qqcom"
);
print_r(array_keys($contact));  //Array ( [0] => id [1] => 姓名 [2] => 公司 [3] => 地址 [4] => 电话 [5] => Email )
echo "<br/>";
print_r(array_keys($contact,"北京市"));    //使用第二个可选参数输出

函数in_array()

in_array()函数的作用是检查数组中是否存在某个值,即在数组中搜索给定的值。本函数有三个参数,前两个是必需的,最后一个为可选参数。

第一个参数未规定要在数组中搜索的值,第二个参数是规定要被搜索的数组。第三个参数设置为true时,函数只有在元素存在于数组中且数据类型与给定值相同时才返回true。

1
2
3
4
5
6
7
8
9
<?php
 
header("Content-type:text/html;charset=utf-8");
 
$os = array("Mac","NT","Trix","Linux");
 
if(in_array("Mac",$os,true    ) ){
    echo "Got Trix";
}

array_search()函数进行检索。该函数与in_array()的参数相同,搜索给定的值,存在则返回相应的键名,也支持对数据类型的严格判断。

array_key_exists()函数还可以检查给定的键名或索引是否存在与数组中。因为在一个数组中键名是唯一的,所以不需要对其数据类型进行判断。isset()函数完成对数组中的键名或索引进行检查,但isset()对于数组中为null的值不会返回true,而array_key_exists()会。

函数array_filp()

array_filp()的作用是交换数组中的键和值。返回一个反转后的数组,如果同一个值出现了多次,则最后一个键名将作为它的值,覆盖前面出现的元素。如果原数组中的值的数据类型不是字符串或整数,函数将报错。

函数array_reverse()

array_reverse()作用是将原数组中的元素顺序翻转,创建新的数组并返回。

第一个参数是必选项,接受一个数组作为输入。第二个参数是可选项,如果指定为true,则元素的键名保持不变,否则键名将丢失。

统计数组元素的个数和唯一性
函数count()

count()计算数组中的元素数目或对象中的属性个数。对于数组,返回其元素的个数,对于其他值则返回1。如果参数是变量而变量没有定义或是变量包含一个空的数组,该函数返回0。

函数array_count_values()

array_count_values()函数用于统计数组中所有值出现的次数。该函数只有一个参数。

1
2
3
4
5
6
7
<?php
 
header("Content-type:text/html;charset=utf-8");
 
$array = array(1,"php",1,"mysql","php");
$newArray = array_count_values($array);
print_r($newArray);   //Array ( [1] => 2 [php] => 2 [mysql] => 1 )     

函数array_unique()

参数需要接受一个数组,当数组中几个元素的值相等时只保留第一个元素,其他的元素被删除,并且返回一个新数组中键名不变。array_unique()先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。

使用回掉函数处理数组的函数
函数array_filter()
        array_filter()函数用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组。
        第一个参数是必选项,要求输入一个被过滤的数组。第二个参数是可选项,将用户自定义的函数名以字符串形式传入。如果自定义过滤函数返回true,则被操作的数组的当前值就会被包含在返回的结果数组中,并将结果组成一个新的数组。如果原数组是一个关联数组,则键名保持不变。函数array_filter()。

PHP数组的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  4. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  5. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  6. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  7. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  8. javascript数组查重方法总结

    文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...

  9. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  10. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

随机推荐

  1. java弱引用之WeakHashMap相关资料

    本人博客中有一篇文章对java中的引用有详细的介绍[http://www.cnblogs.com/javaee6/p/4763190.html],java中WeakHashMap这个类就是java弱引 ...

  2. http 状态码含义

    HTTP状态码被分为五大类, 目前我们使用的HTTP协议版本是1.1, 支持以下的状态码.随着协议的发展,HTTP规范中会定义更多的状态码. 小技巧: 假如你看到一个状态码518, 你并不知道具体51 ...

  3. WPF系列-CheckBox

    自定义样式1 效果: 代码: <!-- CheckBox的样式 --> <Style TargetType="{x:Type CheckBox}"> < ...

  4. phpqrcode 生成二维码

    这个项目需要根据信息来自动生成二维码,到网上搜了下,发现php有生成二维码的类库phpqrcode,所以打算就用这个来生成二维码 从官网下载类库源码http://sourceforge.net/pro ...

  5. 374&375. Guess Number Higher or Lower 1&2

    做leetcode的题 We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You ...

  6. 【CSS】其他CSS属性和特性

    1. 设置元素的颜色和透明度 前面有介绍CSS颜色的各种用法,如 background-color属性.boder-color属性等.还有另外两个与颜色有关的属性. 1.1 设置前景色 color属性 ...

  7. 怎样用ZBrush对模型进行渲染(二)

    继上节课Fisker老师对ZBrush中对渲染和灯光起到重要作用的Light和LightCap进行了具体讲解之后,本节课继续研究Render(渲染)和Light及LightCap相结合会产生什么样的效 ...

  8. [excel玩转表格教程][1G][AVI]

    [excel玩转表格教程][1G][AVI] 下载地址 :http://www.fu83.cn/thread-222-1-1.html

  9. Let it go.Let it be.Keep it up!

    第三份工作仅仅持续了三个月,今天是last day. 虽然时间很短,但也是经历一场,认识了一些人,知道了一些事. 来去匆匆,难免有一点遗憾,还有一点愧疚. 只能放下,顺其自然,继续努力!

  10. Serial Port Programming using Win32 API(转载)

    In this tutorial we will learn How to communicate with an external device like a microcontroller boa ...