• 技术文章 >php教程 >PHP源码

    php对多维数组的某个键值排序方法

    2016-06-08 17:21:45原创539
    确定了很多多维数组排序的函数与例子,但一直对于指定键值进行排序处理不好,今天就网上网罗了一大堆方法,下面整理一下防止以后使用,同时也希望对各位朋友会有所帮助。

    php多维数组排序可以用array_multisort() 函数来处理,array_multisort() 函数可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引

    排序顺序标志:

    SORT_ASC - 按照上升顺序排序

    SORT_DESC - 按照下降顺序排序

    排序类型标志:

    SORT_REGULAR - 将项目按照通常方法比较

    SORT_NUMERIC - 将项目按照数值比较

    SORT_STRING - 将项目按照字符串比较

    例子 1. 对多个数组排序

    代码如下 复制代码

    $ar1 = array("10", 100, 100, "a");
    $ar2 = array(1, 3, "2", 1);
    array_multisort($ar1, $ar2);

    var_dump($ar1);
    var_dump($ar2);
    ?>

    本例中经过排序后,第一个数组将包含 "10","a",100,100。第二个数组将包含 1,1,"2",3。第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致。


    但是这些都不可以指定由那个键值进行排名了,下面我就整理了几个函数算法都不错。

    示例代码

    代码如下 复制代码

    /**
    * 对多位数组进行排序
    * @param $multi_array 数组
    * @param $sort_key需要传入的键名
    * @param $sort排序类型
    */
    function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {
    if (is_array($multi_array)) {
    foreach ($multi_array as $row_array) {
    if (is_array($row_array)) {
    $key_array[] = $row_array[$sort_key];
    } else {
    return FALSE;
    }
    }
    } else {
    return FALSE;
    }
    array_multisort($key_array, $sort, $multi_array);
    return $multi_array;
    }

    例子二

    代码如下 复制代码

    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[] = $arr[$k];
    }

    return $new_array;
    }

    例子3

    代码如下 复制代码

    /*
    function:二维数组按指定的键值排序
    author:www.111cn.net
    */
    function array_sort($array,$keys,$type='asc'){
    if(!isset($array) || !is_array($array) || empty($array)){
    return '';
    }
    if(!isset($keys) || trim($keys)==''){
    return '';
    }
    if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){
    return '';
    }
    $keysvalue=array();
    foreach($array as $key=>$val){
    $val[$keys] = str_replace('-','',$val[$keys]);
    $val[$keys] = str_replace(' ','',$val[$keys]);
    $val[$keys] = str_replace(':','',$val[$keys]);
    $keysvalue[] =$val[$keys];
    }
    asort($keysvalue); //key值排序
    reset($keysvalue); //指针重新指向数组第一个
    foreach($keysvalue as $key=>$vals) {
    $keysort[] = $key;
    }
    $keysvalue = array();
    $count=count($keysort);
    if(strtolower($type) != 'asc'){
    for($i=$count-1; $i>=0; $i--) {
    $keysvalue[] = $array[$keysort[$i]];
    }
    }else{
    for($i=0; $i<$count; $i++){
    $keysvalue[] = $array[$keysort[$i]];
    }
    }
    return $keysvalue;
    }

    例如有下列这样一个数组:

    代码如下 复制代码

    $array=array(
    0=>array('id'=>8,'username'=>'phpernote'),
    1=>array('id'=>9,'username'=>'com'),
    2=>array('id'=>5,'username'=>'www')
    );

    现在需要将这个二维数组按id升序排列,则:

    array_sort($array,'id','asc');

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:array keysvalue SORT quot keys
    上一篇:php fsockopen异步处理实例程序 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 检测移动设备的php代码(手机访问)• 极简的创建文件夹函数 • 用PHP实现小写金额转换大写金额【精确到分】• PHP求天数常犯的错误详解• php xml 保存到array数组
    1/1

    PHP中文网