久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何按多列對多維數組進行排序?

How to sort a multidimensional array by multiple columns?(如何按多列對多維數組進行排序?)
本文介紹了如何按多列對多維數組進行排序?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試做與 MySQL 查詢相同的操作

I'm trying to do the same as MySQL query

SELECT * FROM table ORDER BY field1, field2, ...

但是使用 php 和一個多維數組:

but with php and a multidimensional array:

$Test = array(
    array("a"=>"004", "n"=>"03"),
    array("a"=>"003", "n"=>"02"),
    array("a"=>"001", "n"=>"02"),
    array("a"=>"005", "n"=>"01"),
    array("a"=>"001", "n"=>"01"),
    array("a"=>"004", "n"=>"02"),
    array("a"=>"003", "n"=>"01"),
    array("a"=>"004", "n"=>"01")
);
function msort(&$array, $keys){
    array_reverse($keys);
    foreach($keys as $key){
        uasort($array, sortByKey);
    }
    //
    function sortByKey($A, $B){

        global $key;

        $a = $A[$key];
        $b = $B[$key];
        if($a==$b) return 0;
        return ($a < $b)? -1 : 1 ;
    }
}
//
msort($Test, array("a","n"));
//
foreach($Test as $t){
    echo('<p>'.$t["a"].'-'.$t["n"].'</p>');
}

我的理論是:如果我對重要性較低"的列進行多次排序,然后對重要性較高"的列進行排序,我將獲得類似于上述 MySQL 查詢的順序.

My theory is: if I sort multiple times on columns with "lesser importance" then columns of "greater importance", I'll achieve an order like the above MySQL query.

不幸的是,php 正在返回:

Unfortunately, php is returning:

警告:uasort() 期望參數 2 是一個有效的回調,在第 23 行的/Library/WebServer/Documents/www/teste.array_sort.php 中找不到函數sortByKey"或無效的函數名稱"(uasort 行)

Warning: uasort() expects parameter 2 to be a valid callback, function 'sortByKey' not found or invalid function name in /Library/WebServer/Documents/www/teste.array_sort.php on line 23" (uasort line)

這是一個簡單的訂單功能.我錯過了什么?

It's a simple order function. What am I missing?

推薦答案

從根本上說,我們將使用與 此處所述相同的方法,我們只是用可變數量的鍵來做:

Fundamentally we're going to use the same approach as explained here, we're just going to do it with a variable number of keys:

/**
 * Returns a comparison function to sort by $cmp
 * over multiple keys. First argument is the comparison
 * function, all following arguments are the keys to
 * sort by.
 */
function createMultiKeyCmpFunc($cmp, $key /* , keys... */) {
    $keys = func_get_args();
    array_shift($keys);

    return function (array $a, array $b) use ($cmp, $keys) {
        return array_reduce($keys, function ($result, $key) use ($cmp, $a, $b) {
            return $result ?: call_user_func($cmp, $a[$key], $b[$key]);
        });
    };
}

usort($array, createMultiKeyCmpFunc('strcmp', 'foo', 'bar', 'baz'));
// or
usort($array, createMultiKeyCmpFunc(function ($a, $b) { return $a - $b; }, 'foo', 'bar', 'baz'));

這大約相當于 SQL ORDER BY foo, bar, baz.

That's about equivalent to an SQL ORDER BY foo, bar, baz.

當然,如果每個鍵都需要不同類型的比較邏輯,并且您不能對所有鍵使用通用的 strcmp-,那么您將回到相同的代碼如此處所述.

If of course each key requires a different kind of comparison logic and you cannot use a general strcmp or - for all keys, you're back to the same code as explained here.

這篇關于如何按多列對多維數組進行排序?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Joining 2 tables in SELECT(MYSQL/PHP)(在 SELECT(MYSQL/PHP) 中加入 2 個表)
How to make lt;option selected=quot;selectedquot;gt; set by MySQL and PHP?(如何使lt;option selected=“selectedgt;由 MySQL 和 PHP 設置?)
Auto populate a select box using an array in PHP(使用 PHP 中的數組自動填充選擇框)
PHP SQL SELECT where like search item with multiple words(PHP SQL SELECT where like search item with multiple words)
json_encode produce JSON_ERROR_UTF8 from MSSQL-SELECT(json_encode 從 MSSQL-SELECT 產生 JSON_ERROR_UTF8)
MySQL ORDER BY rand(), name ASC(MySQL ORDER BY rand(),名稱 ASC)
主站蜘蛛池模板: 日本午夜免费福利视频 | 在线激情视频 | 精品久久一区 | 久久久人成影片免费观看 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 夜夜草 | 欧美一区二区在线观看 | 久久久久网站 | 亚洲一区二区三区在线播放 | 天天久| 精品美女久久久久久免费 | 精品国产欧美一区二区三区成人 | 香蕉超碰| 一区二区久久 | 国产精品国产精品国产专区不片 | 久久久区 | 色片在线观看 | 日操操夜操操 | 国产成人免费网站 | 狠狠操电影 | 欧美精品久久久 | 国产欧美日韩综合精品一区二区 | 欧美色性 | 欧美成人激情 | 国产精品亚洲精品 | 欧美一区二区三区四区在线 | 成在线人视频免费视频 | 在线亚洲人成电影网站色www | 精品一区二区三区在线观看 | 黑人巨大精品欧美黑白配亚洲 | 国产精品一区二区久久 | 精品国产久| 欧美一区二区久久 | 日韩精品在线一区 | 伦理午夜电影免费观看 | www.亚洲.com| 国产香蕉视频 | 四虎最新视频 | 在线视频成人 | 亚洲综合视频 | 91精品一区二区三区久久久久 |