2017-01-23 77 views
0

我已經目前正在尋找一個函數,它以下面的順序將數組排序: 例如:我有一個數組有沒有我可以按值排序數組的任何函數,如果值相同,它應該按照它們在數組中提供的順序打印?

$result=array("dddd"=>2,"ccc"=>4,"ddd"=>5,"pks"=>3,"sss"=>2,"test"=>2); 

它應該給出了這樣的輸出。

Array 
(
    [ddd] => 5 
    [ccc] => 4 
    [pks] => 3 
    [dddd] => 2 
    [sss] => 2 
    [test] => 2 
) 

我嘗試過,但它沒有給出所需的輸出。任何幫助將不勝感激。

回答

0

你的意思是你想要按照相反的順序對值進行排序,對於按鍵排序的鍵的重複值?試試這個:

$result=array("dddd"=>2,"ccc"=>4,"ddd"=>5,"pks"=>3,"sss"=>2,"test"=>2); 

array_multisort(array_values($result), SORT_DESC, array_keys($result), SORT_ASC, $result); 

輸出

Array 
(
    [ddd] => 5 
    [ccc] => 4 
    [pks] => 3 
    [dddd] => 2 
    [sss] => 2 
    [test] => 2 
) 

編輯:在重新閱讀你的問題的標題,我知道你也許不想使用自己的鑰匙重複值進行排序,但使用原始數組中的初始位置。在這種情況下,你的問題的可能是重複的:Sort an associative array by value in descending and preserve order when values are same

-1

嘗試ASORT功能:http://php.net/manual/en/function.asort.php

它允許排序與價值關聯數組。它保持鍵的順序

+0

['asort()'](http://php.net/manual/en/function.asort.php)PHP函數**不保存原始順序按鍵。這是在文檔中的一條註釋中指定的:*「如果兩個成員比較相等,它們在已排序數組中的相對順序是未定義的。」* – axiac

+0

那麼,當我說「它保持鍵的順序」時,我在文檔中提到了這一行:「asort - 對數組進行排序並保持索引關聯」。這意味着何時使用asort對數組進行排序,鍵仍保留爲相同的值。只有數組值被排序 –