次の連想配列を考えてみましょう
$arr = Array
(
[banana] => 2
[cherry] => 1
[orange] => 3
[grapefruit] => 1
[apple] => 1
)
PLSQLの用語に似た方法でソートしたいと思います:(A DESC, B ASC
ここで、Aは値で、Bはキーです)意味:
$arr = Array
(
[orange] => 3
[banana] => 2
[apple] => 1
[cherry] => 1
[grapefruit] => 1
)
オレンジとバナナが最初にVALUEであるように、次にリンゴ、チェリー、グレープフルーツが同じVALUEであるため、アルファベット順に並べています。
私が試したこと:
1。ksort()
を実行してからasort () / rsort()を実行し、他の3つの項目のアルファベット順の並べ替えを台無しにすることなく、2番目の並べ替えが配列の先頭にオレンジとバナナをぶつけてくれることを期待します。私は間違っていた。それはすべてを台無しにします。だから私はチェックアウトしました:2。ソート関数とarray_multisort()。しかし、どうやらそれは一度に複数の配列、または多次元配列をソートします。
3.次の比較関数も定義しようとしました。
function cmp($a, $b)
{
foreach ($a as $key1 => $val1) {
foreach ($b as $key2 => $val2) {
if($val1 == $val2){
return strcmp($key1,$key2);
}
else if ($val1 > $val2){
return 1;
}
else{ // $val1 < $val2
return -1;
}
}
}
}
usort()で呼び出しますが、機能しませんでした。
だから私の質問は:要求された動作を実装するPHPメソッドはありますか?
Eugenの場合:
試してみましたが、並べ替える前に機能しません:
Array
(
[lamb] => 3
[rule] => 1
[children] => 1
[teacher] => 2
[eager] => 1
)
ソート後:
Array
(
[children] => 1
[eager] => 1
[rule] => 1
[teacher] => 2
[lamb] => 3
)