PHP开发笔记系列(九)- 数组(三)
??? 写了两篇关于Php数组的日常使用,本篇《PHP开发笔记系列(九)- 数组(三)》
,主要关注数组的大小和排序。
??? 1. 获取数组长度
??? count()函数返回数组中的元素个数,是sizeof()是count()的别名,功能一样。
?
1 2 3 4 5 6 7 8 9 10 11 | file: count .php
url: http:
<?php
$map [ '1st' ] = '1st value' ;
$map [ '2nd' ] = '2nd value' ;
$map [ '3rd' ] = '3rd value' ;
echo count ( $map );
?>
|
Copy after login
?
??? count()函数除了接受第一个被count的数组变量外,还可以接受一个mode的参数,指定是否需要进行递归,统计多维数组中所有元素的个数,代码如下:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | file: count .php
url: http:
<?php
$school [ 'grade1' ][ 'class1' ] = 'class1, grade1' ;
$school [ 'grade1' ][ 'class2' ] = 'class2, grade1' ;
$school [ 'grade1' ][ 'class3' ] = 'class3, grade1' ;
$school [ 'grade2' ][ 'class1' ] = 'class1, grade2' ;
$school [ 'grade2' ][ 'class2' ] = 'class2, grade2' ;
$school [ 'grade2' ][ 'class3' ] = 'class3, grade2' ;
$school [ 'grade3' ][ 'class1' ] = 'class1, grade3' ;
echo count ( $school );
echo count ( $school , 1);
?>
|
Copy after login
?
??? 2. 统计数组元素出现频率
??? array_count_values()函数返回一个包含关联键/值的数组。如'A'出现2次,'B'出现1次,之类。代码如下:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | file: array_count_values .php
url: http:
<?php
$favor = array ( 'Sport' , 'Travel' , 'Sport' , 'Sing' );
$stats = array_count_values ( $favor );
print_r( $stats );
echo "<br/>====================<br/>" ;
$favor1 = array ( '1' => 'Sport' , '2' => 'Sing' , '3' => 'Sing' , '4' => 'Travel' );
$stats1 = array_count_values ( $favor1 );
print_r( $stats1 );
?>
|
Copy after login
?
??? 3. 返回数组非重复元素
??? array_unique()函数会删除数组中所有重复的值,返回一个由不重复值组成的数组,原数组元素不变,代码如下:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | file: array_unique .php
url: http:
<?php
$favor = array ( 'Sport' , 'Travel' , 'Sport' , 'Sing' );
$unique = array_unique ( $favor );
print_r( $favor );
echo "<br/>====================<br/>" ;
print_r( $unique );
?>
|
Copy after login
?
??? 4. 数组排序
??? sort()函数对数组进行排序,各元素按值由低到高的顺序排列。sort()函数不反悔排序后的数组,相反它只是排序,不论结果如何都不反悔任何值。同时,可以为排序指定排序规则,如SORT_NUMERIC是按数值排序,应用在整数和浮点数上,SORT_REGULAR是按ASCII值进行排序,应用在字符或字符串上,SORT_STRING是按字符串排序。代码如下:
??
??? 注意:sort()函数会直接修改被传入的array中的值,仔细查看下面程序的输出结果。
?
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 | file: sort.php
url: http:
<?php
$number = array (1, 4, 3, 2, 5, 10, 7, 1, 2);
print_r( $number );
echo '<br/>' ;
sort( $number , SORT_NUMERIC);
print_r( $number );
echo "<br/>====================<br/>" ;
$letter = array ( 'a' , 'A' , 'Z' , 'f' , 'G' , 'e' );
print_r( $letter );
echo '<br/>' ;
sort( $letter , SORT_REGULAR);
print_r( $letter );
echo "<br/>====================<br/>" ;
$string = array ( 'Jack' , 'Mike' , 'Mary' , 'Jassica' , 'Ruby' );
print_r( $string );
echo '<br/>' ;
sort( $string , SORT_STRING);
print_r( $string );
?>
|
Copy after login
?
??? 从上面的结果可以查看,sort()函数修改的不仅被传入数组的元素,而且把键与值的对应关系都改变了,若需要保持键/值对的关系,需要用到asort()函数,如下:
?
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 | file: asort.php
url: http:
<?php
$number = array (1, 4, 3, 2, 5, 10, 7, 1, 2);
print_r( $number );
echo '<br/>' ;
asort( $number , SORT_NUMERIC);
print_r( $number );
echo "<br/>====================<br/>" ;
$letter = array ( 'a' , 'A' , 'Z' , 'f' , 'G' , 'e' );
print_r( $letter );
echo '<br/>' ;
asort( $letter , SORT_REGULAR);
print_r( $letter );
echo "<br/>====================<br/>" ;
$string = array ( 'Jack' , 'Mike' , 'Mary' , 'Jassica' , 'Ruby' );
print_r( $string );
echo '<br/>' ;
asort( $string , SORT_STRING);
print_r( $string );
?>
|
Copy after login
?
??? 5. 逆序排序
??? rsort()函数与sort函数类似,同样有保持键值对关系和不保持键值对关系的模式,使用方法一致。
??? 6. 数组自然排序
??? 在数组的排序中,如student1.jpg, student2.jpg,student10.jpg, student20.jgp,使用典型的排序如sort后,会排出student1.jpg, studdent10.jpg, student2.jpg, student20.jpg这样的顺序,但期望的顺序是student1.jpg, student2.jpg, studdent10.jpg, student20.jpg。这时就需要用到natsort()函数了。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | file: natsort.php
url: http:
<?php
$student = array ( 'student1.jpg' , 'student20.jpg' , 'student10.jpg' , 'student2.jpg' );
print_r( $student );
echo "<br/> ========================== <br/>" ;
sort( $student );
print_r( $student );
echo "<br/> ========================== <br/>" ;
natsort( $student );
print_r( $student );
?>
|
Copy after login
?
??? natsort()函数还有一个变形,叫natcasesort()函数,在功能上与natsort()函数相同,只是不缺分大小写。
?
1 2 3 4 5 6 7 8 9 10 11 | file: natcasesort.php
url: http:
<?php
$student = array ( 'student1.jpg' , 'Student20.jpg' , 'student10.jpg' , 'Student2.jpg' );
natcasesort( $student );
print_r( $student );
?>
|
Copy after login
?
??? 7. 按键值对数组排序
??? 上述函数主要对数值键数组进行排序,那么对关联键数组进行排序的话,可能有特殊的需求,例如按照键值进行排序,此时需要用到ksort()函数,成功返回TRUE,失败返回FALSE。同时还象sort()函数一样,接受一个sort_flags的参数,为SORT_NUMERIC,SORT_REGULAR,SORT_STRING,指定排序模式。代码如下:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | file: ksort.php
url: http:
<?php
$student [ 'Jack' ] = 'Jack Lee' ;
$student [ 'Samamda' ] = 'Samamda Mo' ;
$student [ 'Smart' ] = 'Smart Chan' ;
$student [ 'Mary' ] = 'Mary Lu' ;
$student [ 'Ban' ] = 'Ban Chuang' ;
print_r( $student );
echo "<br/> ========================== <br/>" ;
ksort( $student );
print_r( $student );
?>
|
Copy after login
?
??? 8. 自定义排序规则
??? Php还提供了一个自定排序的方法,就是usort(),可以使用在该函数中指定的用户自定义比较算法对数组排序。但是一般用得较少,大家自己实验一下。
???
??? Php数组的排序部分就讲到这里,下次继续Php数组的后续内容。
??? 本文地址:
http://ryan-d.iteye.com/blog/1566686
?
?