PHP二维数组排序的3种方法和自定义函数分享

有关排序平常大家都以通过数据库只怕nosql(eg:redis卡塔尔(قطر‎先排好序然后输出到程序里直接使用,不过有个别时候大家要求经过PHP直接来对数组实行排序,而在PHP里积累数据应用最多的正是指标和数组,但管理非常多的正是数组,因为有特别充裕的内置函数库(其实对象自然程度上也足以领略为是数组),这个函数库极大程度上得以帮助大家兑现某个职能。常用的系统函数有sort、asort、arsort、ksort、krsort等等,这里笔者注重说下对二维数组的排序,二种方法:

依附有些键值对二维数组进行排序是个布满难题,这里总计二个函数,可同一时候对八个键值分别排序,当然想要更加的多的话就自行搞定吧。

一、用PHP自带array_multisort函数排序

但是即使要求排序的数组是一个二维数组,须要遵循数组的键值排序,如下面这些二维数组,须求根据sort键名来排序,那么array_multisort(State of Qatar就不能够间接实现了:

复制代码 代码如下:

实例一,

<?php

 代码如下

    $data = array();
    $data[] = array(‘volume’ => 67, ‘edition’ => 2);
    $data[] = array(‘volume’ => 86, ‘edition’ => 1);
    $data[] = array(‘volume’ => 85, ‘edition’ => 6);
    $data[] = array(‘volume’ => 98, ‘edition’ => 2);
    $data[] = array(‘volume’ => 86, ‘edition’ => 6);
    $data[] = array(‘volume’ => 67, ‘edition’ => 7);

$arr = array(
array(
‘sort’ => 3,
‘a’ => ‘a’,
‘b’ => ‘b’
),
array(
‘sort’ => 5,
‘a’ => ‘a’,
‘b’ => ‘b’
),
array(
‘sort’ => 1,
‘a’ => ‘a’,
‘b’ => ‘b’
)
);

    // 获得列的列表
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row[‘volume’];
        $edition[$key] = $row[‘edition’];
    }

这样array_multisort(卡塔尔不不可能见到成效了,

    array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

咱俩得以对函数进行提高一下,依照钦命键值举办排序

    print_r($data);
?>

 代码如下

输出结果:

function array_sort($arr,$key1,$sort1=’asc’,$key2=”,$sort2=’asc’){
    if (!is_array($arr)){
        return $arr;
    }
    foreach($arr AS $key =>
$row){
        $temp[$key] = $row[$key1];
    }
    $sort1 = $sort1 == ‘asc’ ? SORT_ASC : SORT_DESC;
    if(!$key2){
        array_multisort($temp, $sort1,$arr);
    } else {
        foreach($arr AS $key => $row){
            $temp2[$key] = $row[$key2];
        }
        $sort2 = $sort2 == ‘asc’ ? SORT_ASC : SORT_DESC;
        array_multisort($temp, $sort1,$temp2,$sort2,$arr);
    }
澳门新葡萄京官网注册,    return $arr;
}

复制代码 代码如下:

实例二

Array
(
    [0] => Array
        (
            [volume] => 98
            [edition] => 2
        )
    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )
    [2] => Array
        (
            [volume] => 86
            [edition] => 6
        )
    [3] => Array
        (
            [volume] => 85
            [edition] => 6
        )
    [4] => Array
        (
            [volume] => 67
            [edition] => 2
        )
    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )
)

 代码如下

关于array_multisort官方文书档案也可能有相比较详细的验证:

function array_sort($arr,$keys,$type=’asc’){
 $keysvalue = $new_array = array();
 foreach ($arr as $k=>$v){
  $keysvalue[$k] = $v[$keys];
 }
 if($type == ‘asc’){
  asort($keysvalue);
 }else{
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach ($keysvalue as $k=>$v){
  $new_array[$k] = $arr[$k];
 }
 return $new_array;
}

二、自定义函数排序1

 

复制代码 代码如下:

$array = array(
 array(‘name’=>’手机’,’brand’=>’诺基亚’,’price’=>1050),
 array(‘name’=>’笔记本计算机’,’brand’=>’lenovo’,’price’=>4300卡塔尔,
 array(‘name’=>’剃须刀’,’brand’=>’飞利浦’,’price’=>3100),
 array(‘name’=>’跑步机’,’brand’=>’三和松石’,’price’=>4900卡塔尔,
 array(‘name’=>’手表’,’brand’=>’卡西欧’,’price’=>960),
 array(‘name’=>’液晶电视’,’brand’=>’索尼’,’price’=>6299),
 array(‘name’=>’激光打印机’,’brand’=>’惠普’,’price’=>1200)
);

<?php
    $data = array();
    $data[] = array(‘volume’ => 67, ‘edition’ => 2);
    $data[] = array(‘volume’ => 86, ‘edition’ => 1);
    $data[] = array(‘volume’ => 85, ‘edition’ => 6);
    $data[] = array(‘volume’ => 98, ‘edition’ => 2);
    $data[] = array(‘volume’ => 86, ‘edition’ => 6);
    $data[] = array(‘volume’ => 67, ‘edition’ => 7);

$ShoppingList = array_sort($array,’price’);
print_r($ShoppingList);

    // 获得列的列表
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row[‘volume’];
        $edition[$key] = $row[‘edition’];
    }

面是对$array那一个二维数组依据’price’从低到高的排序。

    $ret = arraySort($data, ‘volume’, ‘desc’);

    print_r($ret);

    /**
     * @desc arraySort php二维数组排序 根据钦赐的key 对数组进行排序
     * @param array $arr 就要排序的数组
     * @param string $keys 内定排序的key
     * @param string $type 排序类型 asc | desc
     * @return array
     */
    function arraySort($arr, $keys, $type = ‘asc’) {
        $keysvalue = $new_array = array();
        foreach ($arr as $k => $v){
            $keysvalue[$k] = $v[$keys];
        }
        $type == ‘asc’ ? asort($keysvalue) : arsort($keysvalue);
        reset($keysvalue);
        foreach ($keysvalue as $k => $v) {
           $new_array[$k] = $arr[$k];
        }
        return $new_array;
    }
?>
输出结果:

复制代码 代码如下:

Array
(
    [3] => Array
        (
            [volume] => 98
            [edition] => 2
        )

    [4] => Array
        (
            [volume] => 86
            [edition] => 6
        )

    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )

    [2] => Array
        (
            [volume] => 85
            [edition] => 6
        )

    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )

    [0] => Array
        (
            [volume] => 67
            [edition] => 2
        )

)

其风流倜傥自定义函数与系统函数的叁个分别便是:自定义函数只扶植针对某三个key的排序,假如要扶助多少个key的排序必要实行多次;
而系统函数array_multisort能够三回性对几个key且能够钦点四个排序准绳,系统函数照旧优良刚劲的,推荐应用系统函数,终究是C底层完成的,这里只是比如表明假若通过自定义函数来对数组进行排序,当然那么些自定义函数也得以继续强大来支撑更加多的排序准则。在取排名、排名榜、战表等景观中用到的依旧超多的。

三、自定义函数排序2

以下函数是对贰个加以的二维数组根据钦赐的键值举办排序,先看函数定义:

复制代码 代码如下:

function array_sort($arr,$keys,$type=’asc’){
 $keysvalue = $new_array = array();
 foreach ($arr as $k=>$v){
  $keysvalue[$k] = $v[$keys];
 }
 if($type == ‘asc’){
  asort($keysvalue);
 }else{
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach ($keysvalue as $k=>$v){
  $new_array[$k] = $arr[$k];
 }
 return $new_array;
}

它能够对二维数组遵照钦定的键值进行排序,也得以钦点升序或降序排序法(默认为升序),用法示例:

复制代码 代码如下:

$array = array(
 array(‘name’=>’手机’,’brand’=>’诺基亚’,’price’=>1050),
 array(‘name’=>’台式机Computer’,’brand’=>’lenovo’,’price’=>4300卡塔尔国,
 array(‘name’=>’剃须刀’,’brand’=>’飞利浦’,’price’=>3100),
 array(‘name’=>’跑步机’,’brand’=>’三和松石’,’price’=>4900卡塔尔国,
 array(‘name’=>’手表’,’brand’=>’卡西欧’,’price’=>960),
 array(‘name’=>’液晶电视’,’brand’=>’Sony’,’price’=>6299卡塔尔,
 array(‘name’=>’激光打印机’,’brand’=>’ThinkPad’,’price’=>1200卡塔尔
);

$ShoppingList = array_sort($array,’price’);
print_r($ShoppingList);

下边是对$array那个二维数组遵照’price’从低到高的排序。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注