5.6对数组进行排序
5.6 对数组进行排序
对数组排序实际指的是对数组元素排序。使用PHP的有关内置函数,可以对数组元素按多种方式进行排序,下面分别介绍这些函数的用法。
5.6.1 使用sort()对数组进行排序
使用函数sort()对数组元素按顺向排序,即按字母由前向后或按数字由小到大的顺序排序。该函数的语法如下。
bool sort(array &$arr [,int $sort_flag]);
该函数接受一个数组作为输入参数,如果处理成功,该函数返回TRUE,否则该函数返回FALSE。该函数将会删除所要排序的数组原有的索引值,从而为该数组使用新的索引值。代码5-11演示了如何使用该函数为数组元素排序。
代码5-11 使用函数sort()对数组元素排序5-11.php
01 <?php 02 $planet = array( 03 "Earth", 04 "Venus", 05 "Mars", 06 "Jupiter", 07 "Saturn" 08 ); // 定义数组$planet09 10 sort($planet); // 对数组$planet 进行排序 11 12 foreach($planet as $key => $value) 13 { 14 echo "planet[".$key."]=".$value; // 输出数组中的元素 15 echo "<br/>"; 16 echo "<br/>"; 17 } 18 ?>

图5-10 使用函数sort()对数组元素排序
【代码解析】代码第10行使用sort()函数对数组$planet进行了排序,读者可以通过对比结果来看看数组发生的变化。这段代码的执行结果如图5-10所示。
该函数的第2个参数是可选的,使用它可以改变排序方式。实际应用当中,第2个参数很少使用,这里就不再赘述。
5.6.2 使用rsort()对数组进行逆向排序
使用函数rsort()可以对数组元素做逆向排序,即按字母从后到前或按数字由大到小的顺序排序。该函数的语法如下。
bool rsort(array &$arr [,int $sort_flag]);
该函数接受一个数组作为输入参数,如果处理成功,函数返回TRUE,否则返回FALSE。该函数将会删除所要排序的数组原有的索引值,从而为该数组使用新的索引值。代码5-12演示了函数rsort()的用法。
代码5-12 使用函数rsort()对数组元素排序5-12.php
01 <?php 02 $planet = array( 03 "Earth", 04 "Venus", 05 "Mars", 06 "Jupiter", 07 "Saturn" 08 ); // 定义数组$planet 09 10 rsort($planet); // 对数组元素进行排序 11 12 foreach($planet as $key => $value) 13 { 14 echo "planet[".$key."]=".$value; // 输出数组元素 15 echo "<br/>"; 16 echo "<br/>"; 17 } 18 ?>
【代码解析】代码第10行使用函数rsort()对第02~08行定义的数组$planet进行了逆向排序。读者可以对比结果来了解数组发生的变化。这段代码的执行结果如图5-11所示。
该函数的第2个参数也是可选的,可以用它来改变排序方式。对于初学者来说,这个参数很少使用到,这里不再赘述。
5.6.3 排序时保持原数组的索引
前文介绍的两个函数sort()和rsort(),都会为要排序的数组重新建立索引。有时对数组排序后仍需要保持原数组的索引,对于这种情况,在PHP中可以使用如下两个函数。
·asort():该函数对数组元素进行排序,并且保持数组的原索引关系不变。该函数仍然对数组元素按顺向排序。如果处理成功,该函数返回TRUE,否则返回FALSE。
·ksort():该函数对数组元素按索引名顺序排序,并且保持数组的原索引关系不变。如果处理成功该函数返回TRUE,否则返回FALSE。该函数主要用于关联数组。
代码5-13演示了这两个函数的用法。
代码5-13 使用函数asort()和ksort()对数组元素排序5-13.php
01 $planet2 = array( 02 "X"=>"Earth", 03 "Y"=>"Venus", 04 "Z"=>"Mars", 05 "A"=>"Jupiter", 06 "B"=>"Saturn" 07 ); // 定义数组$planet2 08 09 asort($planet1); // 使用asort() 排序 10 ksort($planet2); // 使用ksort() 排序 11 12 echo " 使用函数asort 对数组元素排序:"; 13 echo "<br/>"; 14 15 foreach($planet1 as $key => $value) // 通过循环输出$planet1 的索引和元素 16 { 17 echo "planet1[".$key."]=".$value; 18 echo "<br/>"; 19 echo "<br/>"; 20 } 21 22 echo "<br/>"; 23 echo " 使用函数ksort 对数组元素排序:"; 24 echo "<br/>"; 25 26 foreach($planet2 as $key => $value) // 通过循环输出$planet2 的索引和元素 27 { 28 echo "planet2[".$key."]=".$value; 29 echo "<br/>"; 30 echo "<br/>"; 31 } 32 ?>
【代码解析】此代码没有很特殊的地方,只是先定义一个数组,然后使用函数asort()和ksort()对数组的元素和数组的索引进行排序。这段代码的执行结果如图5-12所示。
函数sort()按顺向排序数组元素,它有一个对应的逆向排序函数——rsort()。同样,函数asort()和ksort()也分别有一个对应的逆向排序函数arsort()和krsort()。这两个函数分别按照asort()和ksort()的处理方式逆向排序数组元素,它们的用法和函数rsort()类似,这里不再重复举例。

图5-11 使用函数rsort()对数组元素逆向排序

图5-12 使用asort()和ksort()对数组元素排序
5.6.4 数组的随机排序
PHP提供一个随机排序数组元素的函数shuffle(),该函数的语法如下。
bool shuffle (array $array)
该函数为参数数组$array中的元素赋予新的键名,这将删除原有的键名,而不仅仅是重新排序。如果执行成功该函数返回TRUE。代码5-14演示了该函数的用法。
代码5-14 使用函数shuffle()对数组元素进行随机排序5-15.php
01 <?php 02 $cellphone_brand = array( 03 "nokia", 04 "moto", 05 "lenovo", 06 "tcl" 07 ); // 定义数组$cellphone_brand 08 09 echo " 原数组:"; 10 echo "<br/>"; 11 echo "<pre>"; 12 print_r($cellphone_brand); // 输出数组$cellphone_brand 的结构 13 echo "<br/>"; 14 15 shuffle($cellphone_brand); // 进行随机排序 16 echo "<br/>"; 17 18 echo " 元素被重新排序后:"; 19 echo "<br/>"; 20 echo "<br/>"; 21 22 foreach ($cellphone_brand as $cpb) 23 echo $cpb." "; 24 echo "<br/>"; 25 ?>
【代码解析】第1次执行该代码后,将会有如图5-13所示的执行结果,可以看到调用函数shuffle()之后,数组元素被随机排序。然后再次执行该代码,会看到数组元素再次被随机排序,和第1次的结果不同,如图5-14所示。

图5-13 随机排序数组元素结果(1)

图5-14 随机排序数组元素结果(2)
5.6.5 数组的反向排序
本节最后介绍一个可以将数组元素按原顺序反向排序的函数,该函数是array_reverse(),语法如下。
array array_reverse (array $array [, bool $preserve_keys])
该函数返回一个与原数组单元顺序相反的数组,原数组以参数$array传入该函数,该函数的第2个参数是可选的,如果第2个参数$preserve_keys设置为TRUE,则原数组的键名将会被保留。代码5-15演示了该函数的用法。
代码5-15 使用函数array_reverse()对数组元素按原顺序反向排序5-15.php
01 <?php 02 $cellphone_brand = array( 03 "nokia", 04 "moto", 05 "lenovo", 06 "tcl" 07 ); // 定义数组$cellphone_brand 08 09 echo " 原数组:"; 10 echo "<br/>"; 11 12 echo "<pre>"; 13 print_r($cellphone_brand); // 输出原数组的结构 14 echo "</pre>"; 15 16 $cpb = array_reverse($cellphone_brand); // 按原顺序反向排序 17 18 echo "<br/>"; 19 echo " 按原顺序反向:"; 20 echo "<pre>"; 21 print_r($cpb); 22 echo "</pre>"; 23 ?>
【代码解析】执行这段代码,可以看到如图5-15所示的效果。从图中可以看出,函数array_reverse()会将原数组元素顺序颠倒后,返回到一个新数组当中,原数组并未改变。

图5-15 使用array_reverse()反向排序数组元素
上一篇:5.5处理数组元素和键值位置
下一篇:5.7重置一个数组