PHP数组的遍历
在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.
" ; |
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()函数的作用是返回数组中所有元素的值。只有一个必选参数——给定的数组,返回一个包含给定数组中所有值的数组,但不保留键名,被返回的数组将使用顺序的数值键重新建立索引,从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()计算数组中的元素数目或对象中的属性个数。对于数组,返回其元素的个数,对于其他值则返回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()先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。
使用回掉函数处理数组的函数