22

ここから以下のコードを適用しようとすると

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

昇順で結果が得られます。

出力:

0
0
0
0
0
0.29
1.09
6.33

$a と $b を交換すると、1 つの値を除いて降順で結果が得られます

usort($myArray, function($a, $b) {
    return $b['order'] - $a['order'];
});

出力:

6.33
1.09
0
0
0
0
0.29
0

以下の順序で結果を取得したい:

6.33
1.09
0.29
0
0
0
0
0

どうすれば同じことを達成できますか?

4

5 に答える 5

42

私の最初の推測では、usort は整数の応答を期待しており、整数でない場合は戻り値を四捨五入します。0.29 の場合、0 と比較すると、結果は 0.29 (または -0.29) になり、0 に丸められます。usort の場合、0 は 2 つの値が等しいことを意味します。

代わりに次のようにしてみてください。

usort($myArray, function($a, $b) {
    if($a['order']==$b['order']) return 0;
    return $a['order'] < $b['order']?1:-1;
});

(それが正しい方向だと思います。順序を逆にするには、をに変更<します>

于 2013-01-26T07:05:17.510 に答える
12

次のように $a と $b を入れ替えるだけです。

function sort($a, $b){ 
return strcasecmp($b->order, $a->order);
}
usort($myArray, "sort");
于 2014-10-14T20:51:10.927 に答える
9

PHP 7 (およびそれ以降) で宇宙船オペレーターを使用する場合:

usort($myArray, function($a, $b) {
    return $a['order'] <=> $b['order'];
});

昇順でソートされた配列を返します。比較を逆にすると、降順で返されます。

usort($myArray, function($a, $b) {
    return $b['order'] <=> $a['order'];
});
于 2019-12-03T11:57:01.567 に答える
3

配列がソートされたら、単純に配列を逆にすることもできます。

あなたがしたのと同じ方法で始めます:

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

そして、次のように結果を逆にします。

$myArray = array_reverse($myArray);
于 2016-07-15T13:14:10.933 に答える