要在 PHP 中对二维字段进行排序,可以使用 PHP 外部函数 uasort()
示例一:
ounce函数如下:注意,当bounce函数的返回值为正数或者false时,表示bounce函数的第一个参数在前面,第二个参数在前面
$人=数组(
array('num'=>'001','id'=>6,'name'=>'zhangsan','age'=>21),
array('num'=>'001','id'=>7,'name'=>'ahangsan','age'=>23),
array('num'=>'003','id'=>1,'name'=>'bhangsan','age'=>23),
array('num'=>'001','id'=>3,'name'=>'dhangsan','age'=>23),
);
//正数或false表示第一个参数应该在前面
函数按名称排序($x,$y){
returnstrcasecmp($x['名称'],$y['名称']);
使用方法如下:
uasort($person,'sort_by_name');
以下是二维字段排序方法,供参考和笔试使用:
//$待排序的数组字段
//$row按列排序
//$type 排序类型 [ascordesc]
//返回排序后的字段
函数array_sort($array, $row, $type) {
$array_temp=数组();
foreach($arrayas$v){
$array_temp[$v[$row]]=$v;
if($type=='asc'){
ksort($array_temp);
}elseif($type='desc'){
krsort($array_temp);
}别的{
返回$array_temp;
示例二:
一维字段排序可以使用asort、ksort等一些方法进行排序,比较简单。 二维链表如何排序?使用array_multisort和usort可以实现
例如,如下所示的字段:
代码如下所示:
$用户=数组(
数组('名字'=>'汤姆','年龄'=>20)
,array('姓名'=>'安妮','年龄'=>18)
,array('姓名'=>'杰克','年龄'=>22)
);
希望按照年龄从小到大排序。 笔者整理了两种方法,分享给大家。
1.使用array_multisort
使用这种方法会比较麻烦。 需要提取年龄并存储在一维字段中,然后根据年龄进行降序排序。 具体代码如下:
代码如下所示:
$年龄=数组();
foreach($usersas$user){
$ages[]=$user['年龄'];
array_multisort($ages,SORT_ASC,$users);
执行后,$users就是排序后的字段,你可以复制下来看看。 如果需要先按年龄降序排序,再按姓名降序排序,方法与上面相同,即多提取一个姓名字段php数组的长度,最终的排序方法调用如下:
代码如下所示:
array_multisort($ages,SORT_ASC,$names,SORT_ASC,$users);
2.使用usort
使用这种方法最大的好处就是可以自定义一些更复杂的排序方法。 例如,按照名称的宽度升序排列:
代码如下所示:
usort($users, 函数($a, $b){
$al=strlen($a['名称']);
$bl=strlen($b['名称']);
如果($al==$bl)
返回0;
返回($al>$bl)? -1:1;
});
这里使用了一个匿名函数,如果需要的话可以单独提取出来。 其中$a和$b可以理解为$users字段下的元素php数组的长度,可以直接索引name值,估计宽度,然后比较宽度。
=================================================== ======================
这里顺便介绍一下PHP排序的几个函数
sort排序链表通常适用于一维索引字段,并且不会维护索引
rsort 以与 sort 相同的方式反转链表
asort 对链表进行排序并维护索引关系对值进行排序,通常适用于一维字段,并维护索引关系
Arsort反转链表,保持索引关系与asort的用法一致
ksort 根据键值对链表进行排序
krsort 根据键值对链表进行反向排序