对一维数组中某一个或多个键值进行排序,类似数据表的排序

假如有个一维数组为:

 

$array = array(
	0 => array(
    	'id' => 1,
        'sort' => 3,
        'times' => 34,
    ),
   	1 => array(
    	'id' => 2,
        'sort' => 23,
        'times' => 23,
    ),
   	2 => array(
    	'id' => 8,
        'sort' => 3,
        'times' => 32,
    ),
   	3 => array(
    	'id' => 5,
        'sort' => 54,
        'times' => 12,
    ),
   	4 => array(
    	'id' => 4,
        'sort' => 11,
        'times' => 22,
    ),
   	5 => array(
    	'id' => 6,
        'sort' => 22,
        'times' => 34,
    ),
   	6 => array(
    	'id' => 9,
        'sort' => 23,
        'times' => 56,
    ),
);
 

 

然后对这数组首先按 sort 降序排序,接着在相同sort值得情况下按id升序排序,以下有两种方法:

  方法一:利用for循环进行对第二个键值进行排序,如果用于几十万的数据效率不高,不推荐用在数据量大的数组里;

 

	//根据数组某个键值所对应的值来排序
    //这里$array数组先按sort降序排序,接着在相同sort值得情况下按id升序排序
    $orderArr = array();
    foreach($array as $key=>$val) {
        $orderArr[$key]['sort'] = $val['sort'];
    }

    array_multisort($orderArr, SORT_DESC, $array);  //对数组进行sort降序排序

    for($i = 0; $i < count($array) - 1; $i++)
    {
        for($j = $i; $j < count($array); $j++)
        {
            if($array[$i]['sort'] == $array[$j]['sort'] && $array[$i]['id'] > $array[$j]['id'])
            {
                $temp = array();
                $temp = $array[$i];
                $array[$i] = $array[$j];
                $array[$j] = $temp;
            }
        }
    }

    print_r($array);

 

方法二:利用array()本身自带的函数进行排序,效率比上个高的多,可以用于几十万以上的数据处理;强烈推荐使用这种

 

	//根据数组某个键值所对应的值来排序
    //这里$array数组先按sort降序排序,接着在相同sort值得情况下按id升序排序
    $orderArr = array();
    foreach($array as $key=>$val) {
        $orderArr[$key]['sort'] = $val['sort'];
    }

    array_multisort($orderArr, SORT_DESC, $array, SORT_DESC);  //对数组进行sort降序排序,然后再对数组中的第一个键值的数值(id)进行升序排序;如果想sort排序完后接着按times排序,就应该将times设为数组的第一个键值

    print_r($array);
 

 

打印结果:

 

Array
(
    [0] => Array
        (
            [id] => 5
            [sort] => 54
            [times] => 12
        )

    [1] => Array
        (
            [id] => 9
            [sort] => 23
            [times] => 56
        )

    [2] => Array
        (
            [id] => 2
            [sort] => 23
            [times] => 23
        )

    [3] => Array
        (
            [id] => 6
            [sort] => 22
            [times] => 34
        )

    [4] => Array
        (
            [id] => 4
            [sort] => 11
            [times] => 22
        )

    [5] => Array
        (
            [id] => 1
            [sort] => 3
            [times] => 34
        )

    [6] => Array
        (
            [id] => 8
            [sort] => 3
            [times] => 32
        )
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值