web-dev-qa-db-ja.com

usort降順

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

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

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

18
000

私の最初の推測では、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;
});

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

37
Gareth Cornish

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

function sort($a, $b){ 
return strcasecmp($b->order, $a->order);
}
usort($myArray, "sort");
8
Chris Charlwood

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

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

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

次のように結果を逆にします:

$myArray = array_reverse($myArray);
2
Frits

私はこれが古いことを知っていますが、うまくいけば誰かに役立つでしょう。降順を設定する最も簡単な方法は、以下に示すように負の1(-1)を乗算することです。テキストで私のためにうまくいきました。

function DESC($a, $b)
{
    return strcmp($a["text"], $b["text"])*-1;
}

usort($results,"DESC");
0
Jimmy B.