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

【PHP基础】二维数组排序

2014-06-09 14:02 351 查看

自己编写排序函数

自己编写排序函数来解决,排序函数。

这里函数使用我之前一片文章里的快排函数
【php基础】php数组常用操作函数

quikSort($data, 0, count($data)-1);


借用array_multisort

对二维数组排序,排序依据是数组中的一维

例如:

//对一下数组排序,排序按time字段升序排列
$data =
array(
array(
'age' => 20,
'sex' => 'male',
'time' => 1234
),
array(
'age' => 20,
'sex' => 'female',
'time' => 1387
),
array(
'age' => 20,
'sex' => 'female',
'time' => 1236
),
......
)


这里需要先生成一个助手数组

$tmpArr = array(
1234,
1387,
1236,
......
)


然后使用array_multisort($tmpArr, SORT_ASC, $data)来排序

$tmpArr = array();
foreach($data as $one){
$tmpArr[] = $one['time'];
}
array_multisort($tmpArr, SORT_ASC, $data);


借用ksot

和方法二的要求类似

但是借用ksort排序时,排序所依据的那一维上值不能重复,而且数组一维上键值没办法保留

首先将排序所依据的那一维上的值赋给数组一维的键,然后使用ksort排序:

foreach($data as $key => $value){
$data[$value['time']] = $value;
unset($data[$key]);
}
ksort($data);


生成待排序数组的代码

$data = array();
for($i=0;$i<59999;$i++){
$tmp = array();
$tmp['age'] = mt_rand(1,120);
$tmp['sex'] = array_rand(array('male', 'female'));
$tmp['time'] = mt_rand(10000, 99999);
$data[] = $tmp;
}


时间对比

三者的时间对比[运行20次]:

array_multisort

平均: 0.18119

最小: 0.144434928894

最大: 0.234122991562

quickSort()

平均: 1.40006

最小: 1.25567817688

最大: 1.54849505424

ksort

平均: 0.13638

最小: 0.113926887512

最大: 0.176182031631

柱状图

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