• 将二位数组按照第二维的某个元素的值进行排序


    使用两个PHP提供的函数:array_column array_multisort

    1、array_column()  返回输入数组中某个单一列的值。(引用手册)

    语法:array_column(array,column_key,index_key);

    array:必需。规定要使用的多维数组(记录集)。

    column_key:必需。需要返回值的列。可以是索引数组的列的整数索引,或者是关联数组的列的字符串键值。该参数也可以是 NULL,此时将返回整个数组(配合 index_key 参数来重置数组键的时候,非常有用)。

    index_key:可选。用作返回数组的索引/键的列。

    例:从记录集中取出 last_name 列,用相应的 "id" 列作为键值:

    <?php
    // 表示由数据库返回的可能记录集的数组
    $a = array(
      array(
        'id' => 5698,
        'first_name' => 'Bill',
        'last_name' => 'Gates',
      ),
      array(
        'id' => 4767,
        'first_name' => 'Steve',
        'last_name' => 'Jobs',
      )
      array(
        'id' => 3809,
        'first_name' => 'Mark',
        'last_name' => 'Zuckerberg',
      )
    );
    
    $last_names = array_column($a, 'last_name', 'id');
    print_r($last_names);
    ?>

    输出:

    Array
    (
      [5698] => Gates
      [4767] => Jobs
      [3809] => Zuckerberg
    )

    2、下面开始使用这两个函数实现排序

    
    
    $department_level1 = Department::getList(array("level"=>1));//得到一个二维数组
    $count=0;
    $has_done=0;
    $satisfaction = 0;
    $processing = 0;
    foreach ($department_level1 as $key => $value){
            $count += handing::getCountById( $value['id'], "");
            $count_rate = round($count / $handing_count, 4) * 100;
            $has_done += handing::getCountById( $value['id'], "handing_if_complete");
            $has_done_rate = round($has_done / $count, 4) * 100;    
            $processing += handing::getCountById( $value['id'], "processing");
            $type_array[] = array("type0"=>$value["name"],"type1"=>$count,"type2"=>$count_rate,"type3"=>$has_done, "type4"=>$has_done_rate,"type6"=>$processing);//拼接成一个一维数组
    }

    其中$department_level1是这样的一个数组:

    Array ( 
    [0] => Array ( [id] => 298 [name] => 皇城 [level] => 1 ) [1] => Array ( [id] => 282 [name] => 人力资源和社会保障局 [level] => 1 ) [2] => Array ( [id] => 277 [name] => 中小企业局 [level] => 1 ) [3] => Array ( [id] => 251 [name] => 热电燃气集团 [level] => 1 ) [4] => Array ( [id] => 250 [name] => 公路管理局 [level] => 1 ) [5] => Array ( [id] => 249 [name] => 组织部 [level] => 1) [6] => Array ( [id] => 248 [name] => 经济开发区1 [level] => 1 ) [7] => Array ( [id] => 242 [name] => 俚岛镇 [level] => 1)
    )

    经过循环,拼接后的$type_array[]是这样的:

    Array ( 
    [0] => Array ( [type0] => 皇城 [type1] => 0 [type2] => 0 [type3] => 0 [type4] => 0 [type6] => 0 )
    [1] => Array ( [type0] => 人力资源和社会保障局 [type1] => 0 [type2] => 0 [type3] => 0 [type4] => 0 [type6] => 0 )
    [2] => Array ( [type0] => 中小企业局 [type1] => 0 [type2] => 0 [type3] => 0 [type4] => 0 [type6] => 0 )
    [3] => Array ( [type0] => 热电燃气集团 [type1] => 1 [type2] => 1.89 [type3] => 1 [type4] => 100 [type6] => 0 )
    [4] => Array ( [type0] => 公路管理局 [type1] => 2 [type2] => 3.77 [type3] => 1 [type4] => 50 [type6] => 1 )
    [5] => Array ( [type0] => 组织部 [type1] => 2 [type2] => 3.77 [type3] => 1 [type4] => 50 [type6] => 1 )
    [6] => Array ( [type0] => 经济开发区1 [type1] => 3 [type2] => 5.66 [type3] => 2 [type4] => 66.67 [type6] => 1 )
    [7] => Array ( [type0] => 俚岛镇 [type1] => 3 [type2] => 5.66 [type3] => 2 [type4] => 66.67 [type6] => 1 )
    )

    之后,在foreach外部,使用这两个函数

    $column = array_column($type_array,"type".$attribute);
    $type_array = array_multisort($column,SORT_DESC ,$type_array);//降序排序

    其中$attribute是通过页面$_GET["attribute"]获取的一个具体的数值(即:1,2,3,4,6)

    如果$attribute=1,则按照“type1”索引进行排序,$column 的结果是:

    Array ( 
    [0] => 3 [1] => 3 [2] => 2 [3] => 2 [4] => 1 [5] => 0 [6] => 0 [7] => 0
    )

    排序后的$type_array 变为

    Array ( 
        [0] => Array ( [type0] => 俚岛镇 [type1] => 3 [type2] => 5.66 [type3] => 2 [type4] => 66.67 [type6] => 1 )
        [1] => Array ( [type0] => 经济开发区1 [type1] => 3 [type2] => 5.66 [type3] => 2 [type4] => 66.67 [type6] => 1 )
        [2] => Array ( [type0] => 公路管理局 [type1] => 2 [type2] => 3.77 [type3] => 1 [type4] => 50 [type6] => 1 )
        [3] => Array ( [type0] => 组织部 [type1] => 2 [type2] => 3.77 [type3] => 1 [type4] => 50 [type6] => 1 )
        [4] => Array ( [type0] => 热电燃气集团 [type1] => 1 [type2] => 1.89 [type3] => 1 [type4] => 100 [type6] => 0 )
        [5] => Array ( [type0] => 中小企业局 [type1] => 0 [type2] => 0 [type3] => 0 [type4] => 0 [type6] => 0 )
        [6] => Array ( [type0] => 人力资源和社会保障局 [type1] => 0 [type2] => 0 [type3] => 0 [type4] => 0 [type6] => 0 )
        [7] => Array ( [type0] => 皇城 [type1] => 0 [type2] => 0 [type3] => 0 [type4] => 0 [type6] => 0 )
    )

    这样,就完成了对二维数组按照第二维的某个元素排序。

    
    
  • 相关阅读:
    bestcoder#45 1002 求区间的逆序数 树状数组
    poj2299 Ultra-QuickSort 树状数组求逆序数
    codeforces#323(div2) C. GCD Table 贪心
    bestcoder#58(div2) 1002 LCS 置换
    codeforces#321(div2) E. Kefa and Watch
    1sting
    HDU1013 Digital Roots
    【编程思想】【设计模式】【行为模式Behavioral】catalog
    【编程思想】【设计模式】【行为模式Behavioral】chain
    【编程思想】【设计模式】【结构模式Structural】代理模式Proxy
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/9566924.html
Copyright © 2020-2023  润新知