10

オブジェクトに対してPHPのusort関数を使用して自然順序ソートを実行する関数が何であるかを知っている人はいますか。

オブジェクト($ obj-> Rate)に次の値の範囲があるとします。

$obj->10
$obj->1
$obj->2
$obj->20
$obj->22

ソート関数が返されるようにしようとしているのは何ですか

$obj->22
$obj->20
$obj->10
$obj->2
$obj->1

私の現在の標準的なソート機能として

function MySort($a, $b)
{ 
    if ($a->Rate == $b->Rate)
    {
        return 0;
    } 
    return ($a->Rate < $b->Rate) ? -1 : 1;
}

戻ってきました

$obj->1
$obj->10
$obj->2
$obj->20
$obj->22
4

2 に答える 2

25

比較関数にはstrnatcmpを使用してください。例:それは

function mysort($a, $b) {
   return strnatcmp($a->rate, $b->rate);
}
于 2012-09-14T14:47:40.360 に答える
0

Rateプロパティを数値および降順で並べ替える方法はいくつかあります。

入力に基づいたいくつかのデモンストレーションは次のとおりです。

$objects = [
    (object)['Rate' => '10'],
    (object)['Rate' => '1'],
    (object)['Rate' => '2'],
    (object)['Rate' => '20'],
    (object)['Rate' => '22']
];

array_multisort()は明確で表現力豊かです:(デモ

array_multisort(array_column($objects, 'Rate'), SORT_DESC, SORT_NUMERIC, $objects);

usort():(デモ

usort($objects, function($a, $b) {
    return $b->Rate <=> $a->Rate;
});

PHP7.4の矢印関数構文を使用したusort():(デモ

usort($objects, fn($a, $b) => $b->Rate <=> $a->Rate);

PHPの宇宙船演算子(<=>)は、2つの数値文字列を数値として自動的に評価します。余分な/反復された関数呼び出しやフラグは必要ありません。

于 2019-12-24T03:00:34.547 に答える