簡體   English   中英

PHP:如何先按值排序數組,然后按鍵排序

[英]PHP: How to sort array by value first, then by key

我一直在解決以下問題。

我有這個數組:

[596] => 2
[9] => 2
[358] => 2
[1579] => 1
[156] => 1
[576] => 1
[535] => 1

如您所見,值以降序排列,但鍵是隨機的。 我想密鑰也可以排序DESC。 我一直在玩array_multisort,但我無法解決它的問題。 我遇到的第一個問題是array_multisort重新索引數字鍵。 我更改為非數字變體的鍵,即k596等...這使我能夠對鍵進行排序,但不像我想要的那樣。

[k9] => 2
[k596] => 2
[k358] => 2
[k576] => 1
[k535] => 1
[k1579] => 1
[k156] => 1

我最終想看到的結果是:

[k596] => 2
[k358] => 2
[k9] => 2
[k1579] => 1
[k576] => 1
[k535] => 1
[k156] => 1

有人能幫幫我嗎? 必須有一個簡單的方法來做到這一點,對嗎?

好吧,這個問題比我想的更棘手! 給定一個數組$arry = array('a'=>'hilbert', 'b'=>'noether', 'c'=>'landau');

我會生成第二個包含這樣的元組的數組:

$brry = array();
foreach($arry as $key => $value){
    $brry[] = array($key,$value);
}

//Now $brry looks like:
//$brry:
//    [0] => array('a','hilbert');
//    [1] => array('b','noether');
//    [2] => array('c','landau');

//now you can easily sort it!
usort($brry, "cmp");

//And then transform it back to the array structure you have before
foreach($brry as $value){
    $crry[$value[0]] = $value[1];
}

//with this sorting function cmp:
function cmp($first, $second){
    if(strcmp($first[1], $second[1]) != 0){
        return strcmp($first[1], $second[1]);
    }
    else{
        return strcmp($first[0], $second[0]);
    }
}

函數cmp現在按字符串排序,因此strcmp("192","20") > 0而整數可能不是這樣!

uksort($array, function ($a, $b) use ($array) {
    if ($array[$a] != $array[$b]) {
        return $array[$a] - $array[$b];
    }
    return $a - $b;
});

插入適當的比較操作,使用簡單-這里作為示例。 如果您依賴於PHP <5.3並且沒有匿名函數,這有點棘手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM