在PHP中,利用sort()、ksort()对多个数组进行排序很简单,使用它们,可以对一维数组进行关键字排序、按值排序、逆排序等。但是这些函数不能方便地用于多维数组。假设有一个数组定义如下:
$students = array(
256 => array('name' => 'John', 'grade' => 98),
23 => array('name' => 'Tom', 'grade' => 85),
9 => array('name' => 'Steve', 'grade' => 94),
363 => array('name' => 'Robert', 'grade' => 83),
69 => array('name' => 'Jack', 'grade' => 78)
);或许我们需要按name或grade进行排序。为了对多维数组排序,我们需要定义自己的排序函数,然后告诉PHP在调用usort()、uasort()或者uksort()时使用我们自己定义的排序函数。自定义的排序函数时必须接收两个参数,并且返回一个值表示哪一个参数应在前面。负数或false表示第一个参数应排在第二个参数前面,正数或true表示第二个参数应在前面,如果值为0,则表示两个参数值相等。
下面写一个按grade降序排序的自定义排序函数:
function grade_sort($x, $y) {
return ($x['grade'] < $y['grade']);
}
之后在PHP中这样使用它:
uasort($students, 'grade_sort');运行结果如下:
注:/*usort()函数根据数值进行排序,但是不保存关键字(对于外层数组来说)
*uasort()函数就会保存关键字
*uksort()函数将会基于关键字进行排序
*/
按名字的自定义排序函数:
function name_sort($x, $y) {
return strcasecmp($x['name'], $y['name']);
}
调用这个函数:
uasort($students, 'name_sort');看一下按名字排序的运行结果:
注:/*strcasecmp()函数会返回一个数值——负数、0或正数,表示这两个字符串的相似程度
*当返回负数时,表示按照字母顺序排列,第一个字符串排在第二个字符串前面
*当返回正数时,就表示第二个字符串在前
*当返回0时,表示两个字符串完全相等
*/
总结一下:PHP对多维数组排序时,一般应先自定义好排序函数,然后再使用usort()、uasort()或者uksort()时把相应参数传进去即可实现排序。
这篇博客介绍了如何在PHP中对多维数组进行排序。文章提到,尽管sort()和ksort()等函数适用于一维数组,但不适用于多维数组。博主给出了按grade降序排序和按名字排序的自定义函数示例,其中,usort()用于数值排序,uasort()保留关键字并按值排序,uksort()则按关键字排序。总结指出,对多维数组排序需先定义排序函数,然后结合usort()等函数来实现。
465

被折叠的 条评论
为什么被折叠?



