zoukankan      html  css  js  c++  java
  • PHP 二维数组按照指定键值去重、排序

    博主在项目开发中,发现了这两个需求,然后整理了这两个方法与大家分享。欢迎吐槽,欢迎转载使用。话不多说,先上代码:

        /**
         * 二维数组按照指定键值去重
         * @param $arr 需要去重的二维数组
         * @param $key 需要去重所根据的索引
         * @return mixed
         */
    function arr_uniq($arr,$key)
    {
        $key_arr = [];
        foreach ($arr as $k => $v) {
            if (in_array($v[$key],$key_arr)) {
                unset($arr[$k]);
            } else {
                $key_arr[] = $v[$key];
            }
        }
        sort($arr);
        return $arr;
    }
        /**
         * 二维数组按指定的键值排序
         * @param $array 需要排序的二维数组
         * @param $keys 需要排序根据的索引
         * @param string $type 正序/倒叙(默认倒序)
         * @return array|string
         */
    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  = [];
            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  = [];
            $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;
        }

    再来看两个示例:

     1 
     2 $arr = [
     3     [
     4         'total'=>123,
     5         'serve'=>456,
     6         'speed'=>789
     7     ],
     8     [
     9         'total'=>123,
    10         'serve'=>45,
    11         'speed'=>89
    12     ],
    13     [
    14         'total'=>1234,
    15         'serve'=>456,
    16         'speed'=>789
    17     ],
    18     [
    19         'total'=>"123",
    20         'serve'=>456,
    21         'speed'=>789
    22     ]
    23 ];
    // 去重
    24 $re = arr_uniq($arr,'total'); 25 var_dump($re); 26 输出: 27 array(2) { 28 [0] => 29 array(3) { 30 'total' => 31 int(123) 32 'serve' => 33 int(456) 34 'speed' => 35 int(789) 36 } 37 [1] => 38 array(3) { 39 'total' => 40 int(1234) 41 'serve' => 42 int(456) 43 'speed' => 44 int(789) 45 } 46 } 47
    //排序 48 $re = array_sort($arr, 'speed', 'desc'); 49 var_dump($re); 50 51 输出: 52 array(4) { 53 [0] => 54 array(3) { 55 'total' => 56 string(3) "123" 57 'serve' => 58 int(456) 59 'speed' => 60 int(789) 61 } 62 [1] => 63 array(3) { 64 'total' => 65 int(1234) 66 'serve' => 67 int(456) 68 'speed' => 69 int(789) 70 } 71 [2] => 72 array(3) { 73 'total' => 74 int(123) 75 'serve' => 76 int(456) 77 'speed' => 78 int(789) 79 } 80 [3] => 81 array(3) { 82 'total' => 83 int(123) 84 'serve' => 85 int(45) 86 'speed' => 87 int(89) 88 } 89 }

     明白了没,哈哈,是不是很实用。。

  • 相关阅读:
    公式编辑器mathtype中一些符号显示方框的解决方法
    I got my first job
    我的第二个面试通知
    清空visual studio2010的查找历史
    King Back
    IIS中“使用 XSL 样式表无法查看 XML 输入”问题的解决
    JDBC 各种连接方式[转载]
    力扣每日刷题(1)
    力扣每天刷题(3)
    力扣每天刷题(2)
  • 原文地址:https://www.cnblogs.com/wxgthinking/p/7987824.html
Copyright © 2011-2022 走看看