成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php 二維數(shù)組排序

ashe / 721人閱讀

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

前提

給定一個二維數(shù)組,請根據(jù)指定的數(shù)組key,寫出最優(yōu)的排序。排序條件age asc,sex desc,指定數(shù)組如下:

$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);

這應(yīng)該是最簡單的方式了,直接使用php現(xiàn)成的函數(shù),快捷的不要不要的。

方式二:
 $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);

嗯,勉強看的過去,但是感覺有點不優(yōu)雅。

方式三:
        $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);
        });

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

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

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

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,查看了手冊,沒看到說明,

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28964.html

相關(guān)文章

  • php二維數(shù)組排序

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

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

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

    Bmob 評論0 收藏0
  • PHP二維數(shù)組排序

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

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

    安利個小李子先

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

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

    KnewOne 評論0 收藏0

發(fā)表評論

0條評論

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