0

配列を並べ替えるためにいくつかの関数に資金を提供しますが、それらがstdClassオブジェクトであるか、少なくとも正しいものが見つからなかった場合、それらのいずれも並べ替えることができません

この配列を値の順序で並べ替える必要があります

 [data] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 12
                            [name] => Title1
                            [ordering] => 1
                        )

                    [1] => stdClass Object
                        (
                            [id] => 14
                            [name] => Title2
                            [ordering] => 3
                        )

                    [2] => stdClass Object
                        (
                            [id] => 18
                            [name] => Title4
                            [ordering] => 2
                        )

                    [3] => stdClass Object
                        (
                            [id] => 22
                            [name] => Title5
                            [ordering] => 4
                        )

                )

どんな助けでも大歓迎です。ありがとうございました!

4

2 に答える 2

3

オブジェクトのフィールドに基づいてカスタムの並べ替え関数を定義しordering、それをusortで渡します。

usortのドキュメント

function sortByOrdering($obj1, $obj2) {
   return $obj2->ordering - $obj1->ordering;
}

usort($input['data'], 'sortByOrdering');

$input = usort(...)配列は内部で参照されているため、再割り当てする必要はありません。usort

于 2012-05-17T01:55:33.123 に答える
0

ありがとう、SiGanteng!それが私が探していたものです。

結果のソート順が降順であることに気づきました。関数を変更するだけで、これを元に戻すことができました。returnステートメントで$obj1と$obj2を交換しました。

return $obj1->ordering - $obj2->ordering;

私のアプリケーションでは、配列データは次のとおりです。

Array
(
    [3] => stdClass Object
        (
            [term_id] => 3
            [name] => Salesperson
            [slug] => 01-salesperson
            [term_group] => 0
            [term_order] => 0
            [term_taxonomy_id] => 3
            [taxonomy] => skill
            [description] => 
            [parent] => 0
            [count] => 6
            [object_id] => 53
        )

    [5] => stdClass Object
        (
            [term_id] => 5
            [name] => Airport Security
            [slug] => 02-airport-security
            [term_group] => 0
            [term_order] => 0
            [term_taxonomy_id] => 5
            [taxonomy] => skill
            [description] => 
            [parent] => 0
            [count] => 30
            [object_id] => 575
        )

    [4] => stdClass Object
        (
            [term_id] => 4
            [name] => Baker
            [slug] => 03-baker
            [term_group] => 0
            [term_order] => 0
            [term_taxonomy_id] => 4
            [taxonomy] => skill
            [description] => 
            [parent] => 0
            [count] => 28
            [object_id] => 453
        )
)

上記のデータを使用して、配列$skills_navを「スラッグ」値の昇順で再分類する必要がありました。タスクを実行した最終的なコードは次のとおりです。

function sortByOrdering($obj1, $obj2) {
   return $obj1->slug - $obj2->slug;
}
usort($skills_nav, 'sortByOrdering');

読者にさらに説明するために、関数sortByOrderingによって期待される2つの引数は、USORTによって自動的に提供されます。これは、マニュアルのUSORT機能で説明されています。

于 2013-03-02T22:36:51.530 に答える