2017-01-23 7 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 
) 

私はarsortを試しましたが、必要な出力が得られません。何か助けになるでしょう。

答えて

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関数**は元の順序を保持しません**キー。 *「2つのメンバーが等しいと比較すると、ソートされた配列の相対的な順序は未定義です。」* – axiac

+0

「キーの順序が保持されている」と言われたとき、私は「asort - 配列をソートしてインデックスの関連付けを維持する」というドキュメントのこの行を参照していました。つまり、配列がアソートを使用してソートされると、キーは同じ値に割り当てられたままになります。配列の値のみがソートされます –

関連する問題