第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何組合多個排序函數(shù)

如何組合多個排序函數(shù)

PHP
冉冉說 2022-09-17 17:18:56
它的工作原理類似于 SQL 中的魅力:SELECT * FROM person ORDER BY age DESC, name ASC但是,如果我們在PHP數(shù)組中有這樣的數(shù)據(jù)呢?我們怎樣才能做到呢?例如,如果我有$a = [['name' => 'Alfred', 'age' => 40],['name' => 'Mark', 'age' => 40],['name' => 'Lue', 'age' => 45],['name' => 'Ameli', 'age' => 38],['name' => 'Barb', 'age' => 38],];我想按年齡降序排序,然后按名字升序排序。就像上面的 SQL 一樣。因此,正確的名稱順序是:。請參閱數(shù)據(jù)庫小提琴。Lue, Alfred, Mark, Ameli, Barb在PHP中獲取它的錯誤嘗試是:usort($array, function ($a, $b) {    return -strnatcasecmp($a['age'], $b['age']); // desc});usort($array, function ($a, $b) {    return strnatcasecmp($a['name'], $b['name']); // asc});兩個 usort 調(diào)用中的每一個都可以正常工作,但它會覆蓋上一個結(jié)果,而我想將它們?nèi)拷M合在一起。理想情況下,我希望有一個函數(shù),接受任何數(shù)量的可調(diào)用來混合它們。請指教。更新:正如下面所合理評論的那樣,array_multisort適合像這樣對常規(guī)數(shù)組進行排序。但我想找到解決方案來結(jié)合.任何比較器,甚至像這個。順便說一句,SQL允許按表達式排序,而不僅僅是按簡單字段排序。comparator closures
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經(jīng)驗 獲得超3個贊

這是一種方法:


function combineComparators(...$comparators)

{

    return function($a, $b) use($comparators)

    {

        foreach($comparators as $c)

        {

            $res = $c($a, $b);

            if($res!=0)

                return $res;

        }

        return 0;

    };

}


$a = [

['name' => 'Alfred', 'age' => 40],

['name' => 'Mark', 'age' => 40],

['name' => 'Lue', 'age' => 45],

['name' => 'Ameli', 'age' => 38],

['name' => 'Barb', 'age' => 38],

];


$cmp1 = function ($a, $b) {

    return -strnatcasecmp($a['age'], $b['age']); // desc

};


$cmp2 = function ($a, $b) {

    return strnatcasecmp($a['name'], $b['name']); // asc

};


usort($a, combineComparators($cmp1, $cmp2));


var_dump($a);


查看完整回答
反對 回復(fù) 2022-09-17
?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

有人會有一個很好的,但我更喜歡。usortarray_multisort

提取每列,按順序?qū)α羞M行排序,然后按該排序順序?qū)υ剂羞M行排序:

array_multisort(array_column($a, 'age'), SORT_DESC, array_column($a, 'name'), SORT_ASC, $a);


查看完整回答
反對 回復(fù) 2022-09-17
  • 2 回答
  • 0 關(guān)注
  • 102 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號