文章教程

5.6对数组进行排序

9/17/2020 9:31:19 PM 人评论 次浏览

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()反向排序数组元素

教程类别