php如何实现二维数组排序
时间 : 2023-02-15 17:20:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

PHP语言可以通过把二维数组转换成一维数组来实现二维数组的排序,从而实现二维数组中指定字段的排序效果。排序可以使用sort()、arsort()、asort()、ksort()、krsort()函数等,其中sort()函数用于以升序来排序,arsort()用于以降序来排序,asort()用于根据作为键的值排序,ksort()用于根据作为键的值升序排序,krsort()用于根据作为键的值降序排序。

例如有一个二维的数组array,其中的每个元素都是一个数组,如下所示:

$array = array(

array("id" => 8, "name" => "凤姐", "age" => 30, "height" => 162),

array("id" => 10, "name" => "美美", "age" => 32, "height" => 170),

array("id" => 3, "name" => "小强", "age" => 25, "height" => 168),

);

我们可以使用sort()函数将这个数组按age字段从小到大排序:

$age = array();

foreach($array as $key => $value)

{

$age[$key] = $value['age'];

}

array_multisort($age, SORT_ASC, $array);

该函数的第一个参数$age表示排序的字段,第二个参数SORT_ASC表示升序排序,第三个参数表示需要排序的数组($array)。

排序后,二维数组$array将按age字段从小到大排序,结果如下:

Array

(

[0] => Array

(

[id] => 3

[name] => 小强

[age] => 25

[height] => 168

)

[1] => Array

(

[id] => 8

[name] => 凤姐

[age] => 30

[height] => 162

)

[2] => Array

(

[id] => 10

[name] => 美美

[age] => 32

[height] => 170

)

)

以上代码将二维数组实现指定字段的排序效果,其实 PHP 中的排序函数还支持多个字段的排序,可以根据需要添加的键值个数,

PHP中使用array_multisort函数实现二维数组的排序,array_multisort函数可以根据键名或键值对多个数组或多维数组进行排序,并保持索引关联。

以下是一维数组的排序实例:

$arr=array(55,22,1,56,89);

array_multisort($arr);

上面的代码将对$arr进行排序,排序结果如下:

$arr=[1,22,55,56,89];

对二维数组进行排序时,可以选择按其中一列排序或多列排序,可以使用array_multisort函数:

$arr= array(

array('name'=>'zhangsan','age'=>20),

array('name'=>'lisi','age'=>25),

array('name'=>'wangwu','age'=>18)

);

array_multisort($arr);

//按照$arr列中的“name”键排序

$arr = array_column($arr,'name');

array_multisort($arr,SORT_DESC,$arr);

//按照$arr列中的“age”键排序

$age=array_column($arr,'age');

array_multisort($age,SORT_ASC,$arr);

//先以“age”升序,再以“name”降序排序

array_multisort($age,SORT_ASC,$arr,SORT_DESC);

上面的代码将按照数组$arr中的age或name键进行排序,排序结果如下:

$arr= array(

array('name'=>'wangwu','age'=>18),

array('name'=>'zhangsan','age'=>20),

array('name'=>'lisi','age'=>25)

);

由此可见,array_multisort函数对于实现二维数组的排序非常有效,使用起来也十分简单。当二维数组排序,一般需要先定义每个数组的键值,然后使用array_column函数将指定的键作为一维数组,最后使用array_multisort函数把全部的数组值进行排序即可。