【PHP基础】二维数组排序

自己编写排序函数

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

    这里函数使用我之前一片文章里的快排函数  【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


柱状图

时间对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值