国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php 二維數組排序

ashe / 695人閱讀

摘要:前提給定一個二維數組,請根據指定的數組寫出最優的排序。排序條件,指定數組如下估計大家都沒有什么問題,排序嘛,簡單的不要不要的方式一這應該是最簡單的方式了,直接使用現成的函數,快捷的不要不要的。

前提

給定一個二維數組,請根據指定的數組key,寫出最優的排序。排序條件age asc,sex desc,指定數組如下:

$arr = [
            ["id"=>1, "age"=>1, "sex"=>6, "name"=>"a"],
            ["id"=>2, "age"=>3, "sex"=>1, "name"=>"c"],
            ["id"=>3, "age"=>3, "sex"=>1, "name"=>"b"],
            ["id"=>4, "age"=>2, "sex"=>1, "name"=>"d"],
        ];

估計大家都沒有什么問題,排序嘛,簡單的不要不要的:

方式一:
 array_multisort(array_column($arr,"age"),SORT_ASC,array_column($arr,"sex"), SORT_DESC, $mylist);

這應該是最簡單的方式了,直接使用php現成的函數,快捷的不要不要的。

方式二:
 $sort = [];
        foreach($arr as $k=>$v) {
          
            $sort["age"][$k] = $v["age"];
            $sort["sex"][$k] = $v["sex"];
        }

array_multisort($sort["age"],SORT_ASC,$sort["sex"],SORT_DESC,$mylist);

嗯,勉強看的過去,但是感覺有點不優雅。

方式三:
        $orders=["age"=>"asc","sex"=>"desc"];
        usort($arr, function($a, $b) use($orders) {
            $result = [];
            foreach ($orders as $key=>$value) {
                list($field, $sort) = [$key,$value];
                if (!(isset($a[$field]) && isset($b[$field]))) {
                    continue;
                }
                if (strcasecmp($sort, "desc") === 0) {
                    $tmp = $a;
                    $a = $b;
                    $b = $tmp;
                }
                if (is_numeric($a[$field]) && is_numeric($b[$field]) ) {
                    $result[] = $a[$field] - $b[$field];
                } else {
                    $result[] = strcmp($a[$field], $b[$field]);
                }
            }

            return implode("", $result);
        });

三種方式都可以,都比較簡單,那么問題來了。

問題
如果排序數組不是固定的呢,排序數組是動態從數據庫查詢出來,排序條件也不是固定的呢,那么我們肯定要封裝函數,如果使用php內置函數:
function _sort(){
......
array_multisort(...)
}

這里我們就看出問題來了,array_multisort的參數不固定啊,使用有兩個方法:func_get_args()...$arg,放棄func_get_args(),因為沒有辦法使用。如果是自己寫的函數也建議不用,因為使用func_get_args(),容易讓函數看上去是不需要傳遞參數的。如果你在寫大量代碼的時候,進行縮放的時候,也很難了解這個函數參數大概細節。這是非常不方便的。所以函數如下:

function _sort( &$arr, $sorts )
        {
            $sortParams = [];
            foreach ( $sorts as $key => $v ) {
                $sortParams[] = array_column($arr, $key);
                $sortParams[] = strcasecmp($v, "desc") === 0 ? SORT_DESC : SORT_ASC;
            }
            array_push($sortParams, $arr);
          
            array_multisort(...$sortParams);
        }
 



_sort(["age"=>"asc","name"=>"desc","sex"=>"asc"]);

看是去很好對吧,但是運行才知道,沒有效果,難道是array_multisort不支持...$arg,查看了手冊,沒看到說明,

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28964.html

相關文章

  • php二維數組排序

    摘要:數組的排序,如果是一維的,那肯定相信大家都沒問題。但是如果數組是二維的呢其實問題也不大畢竟大法好但是我想給大家介紹的是自己內置的一個函數就是他下面,請看一個例子某一個需要排序的神秘排序具體實現排序過程,還請小伙伴們自行腦補 數組的排序,如果是一維的,那肯定相信大家都沒問題。但是如果數組是二維的呢?其實問題也不大 showImg(https://segmentfault.com/img/...

    baukh789 評論0 收藏0
  • 一個簡單的給二維數組按照某個字段的值進行排序的算法

    摘要:之前看到一道面試題,大概意思是盡可能的寫出來給二維數組按照某個字段值排序的功能比如說是下面數組結構按照年齡對用戶進行排序大家第一眼感覺應該是用循環,然后用冒泡排序之類的去計算但這一道題顯然不是去考察大眾都能想到的它應該是想考一下求職者對基本 之前看到一道面試題,大概意思是盡可能的寫出來給二維數組按照某個字段值排序的功能;比如說是下面數組結構: $users = [ [name ...

    Bmob 評論0 收藏0
  • PHP二維數組排序

    摘要:二維數組根據某個字段排序功能按照用戶的年齡倒序排序張三李四王五趙六黃七排序順序標志降序升序排序字段輸出結果黃七李四張三趙六王五

    jackwang 評論0 收藏0
  • php二維數組指定其鍵名對其排序的方法

    安利個小李子先

    laoLiueizo 評論0 收藏0
  • PHP二維數組根據二維鍵名去重算法

    摘要:需求現在有下面一組二維數組青葉我是青葉合肥男足球棒球需要將處于第二維鍵名為,其值相同的數組的合并形成一個新的數組。 需求 現在有下面一組二維數組: array(8) { [0]=> array(2) { [name]=> string(4) name [value]=> string(6) 青葉 } [1]=> array(2) { ...

    KnewOne 評論0 收藏0

發表評論

0條評論

ashe

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<