您的位置:首页 > 编程语言 > PHP开发

php多维数组自定义排序 uasort()

2016-04-04 00:00 609 查看
php内置的排序函数很多;正反各种排;

常用的排序函数:

sort() - 以升序对数组排序
rsort() - 以降序对数组排序
asort() - 根据值,以升序对关联数组进行排序
ksort() - 根据键,以升序对关联数组进行排序
arsort() - 根据值,以降序对关联数组进行排序
krsort() - 根据键,以降序对关联数组进行排序

基本都能满足需求了;关于这些函数的使用方法就不多啰嗦了;

但是在项目的实际开发中还是会有些更加苛刻的排序需求;今天要介绍的排序函数是: uasort()

uasort主要是用在需要按照自定义的方法并且保留索引关系对多维数组的排序上;

有如下数组

$sort_array = array(
"array1" => array(
'word'=>'test1',
'sortnumber'=>1,
),
'array3'=>array(
'word'=>'test4',
'sortnumber'=>4,
),
'array2'=>array(
'word'=>'test3',
'sortnumber'=>3,
),
'array5'=>array(
'word'=>'test5',
),
'array4'=>array(
'word'=>'test2',
'sortnumber'=>2,
),
);

需求是按照sortnumber以升序的方式排序;

首先需要写一个自定义排序的规则;

// 自定义排序函数
function my_sort($a,$b){
$prev = isset($a['sortnumber']) ? $a['sortnumber'] : 0;
$next = isset($b['sortnumber']) ? $b['sortnumber'] : 0;
if($prev == $next)return 0;
return ($prev<$next) ? -1 : 1;
}
echo '<pre>排序前:<br>';
print_r($sort_array);
uasort($sort_array, "my_sort");
echo "排序后:<br>";
print_r ($sort_array);

得到的结果:

排序前:
Array
(
[array1] => Array
(
[word] => test1
[sortnumber] => 1
)

[array3] => Array
(
[word] => test4
[sortnumber] => 4
)

[array2] => Array
(
[word] => test3
[sortnumber] => 3
)

[array5] => Array
(
&
7fe0
nbsp;    [word] => test5
)

[array4] => Array
(
[word] => test2
[sortnumber] => 2
)

)
排序后:
Array
(
[array5] => Array
(
[word] => test5
)

[array1] => Array
(
[word] => test1
[sortnumber] => 1
)

[array4] => Array
(
[word] => test2
[sortnumber] => 2
)

[array2] => Array
(
[word] => test3
[sortnumber] => 3
)

[array3] => Array
(
[word] => test4
[sortnumber] => 4
)

)

最后需要提醒的是:自定义的函数要使用isset检测下需要排序的字段是否存在如不存在赋个默认的0;不然会有报错提示;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: