3

以下のデータのような$restrictedEventsという変数に、eventbrite.comapiから返されたデータの配列が格納されています。これは、ここに貼り付けるための1つのイベントを表していますが、完全な配列にこのような約80のstdClassオブジェクトがあります。

この配列を各stdClassオブジェクトの[title]キーでアルファベット順に並べ替えたいと思います。私は使用してみました:

usort($restrictedEvents, "title");

ただし、これは次のエラーを返します。

Warning: usort() [function.usort]: Invalid comparison function in model.php on line 109

次のレベルにあるため、タイトルキーが見つからないと思います。私がどこで間違っているのか、そしてどのようにタイトルでソートできるのかについてのポインタをいただければ幸いです。どうもありがとう。

Array 
(
[4791063199] => stdClass Object
    (
        [box_header_text_color] => 393837
        [link_color] => EE6600
        [box_background_color] => FFFFFF
        [box_border_color] => D9D4D0
        [timezone] => Europe/London
        [organizer] => stdClass Object
            (
                [url] => http://www.eventbrite.com/org/2866607767
                [description] => 
                [long_description] => 
                [id] => 2866607767
                [name] => B&Q Manifestival
            )

        [background_color] => E3DFDC
        [id] => 4791063199
        [category] => 
        [box_header_background_color] => F0ECE9
        [capacity] => 20
        [num_attendee_rows] => 0
        [title] => Closed Event Test
        [start_date] => 2012-11-07 19:00:00
        [status] => Live
        [description] => Lorem ipsum
        [end_date] => 2012-11-07 21:00:00
        [tags] => 
        [timezone_offset] => GMT+0000
        [text_color] => 393837
        [title_text_color] => 
        [password] => 
        [tickets] => Array
            (
                [0] => stdClass Object
                    (
                        [ticket] => stdClass Object
                            (
                                [description] => 
                                [end_date] => 2012-11-07 17:00:00
                                [min] => 1
                                [max] => 1
                                [price] => 0.00
                                [quantity_sold] => 0
                                [visible] => true
                                [currency] => GBP
                                [quantity_available] => 20
                                [type] => 0
                                [id] => 15940001
                                [name] => Manifestival Event
                            )

                    )

            )

        [created] => 2012-11-07 10:40:36
        [url] => http://www.eventbrite.com/event/4791063199
        [box_text_color] => 393837
        [privacy] => Private
        [venue] => stdClass Object
            (
                [city] => 
                [name] => HR Training Room
                [country] => 
                [region] => 
                [longitude] => 0
                [postal_code] => 
                [address_2] => 
                [address] => 
                [latitude] => 0
                [country_code] => 
                [id] => 2619469
                [Lat-Long] => 0.0 / 0.0
            )

        [modified] => 2012-11-07 10:47:20
        [repeats] => no
    )
4

4 に答える 4

10

2番目のパラメータusortは関数である必要があります。http://php.net/manual/en/function.usort.phpを参照してください。次のような関数を渡す必要があります。

function cmp($a, $b)
{
    return strcmp($a->title, $b->title);
}

私はあなたがそれをのように呼ぶだろうと思いますusort($restrictedEvents, "cmp");

于 2012-11-07T20:14:11.893 に答える
3

あなたはウーゾグッズでそれを行うことができます:

$result = Arrays::sort($restrictedEvents, Comparator::compareBy('title'));

http://ouzo.readthedocs.org/en/latest/utils/comparators.html

于 2015-01-07T16:00:17.703 に答える
1

の2番目のパラメーターusortは関数であり、キー名ではありません。関数は、並べ替えられている配列の2つの要素を渡され、これら2つの要素が相互にどのように順序付けられるかを示す値を返します。関数に渡される順序が正しい場合は-1、逆の場合は1です。 、およびそれが問題でない場合は0(2つの要素は比較の範囲内で等しい)。これがあなたのケースの例です:

usort($restrictedEvents, 
      function($a, $b) { return strcmp($a->title, $b->title); });

古いPHP(無名関数を導入した5.3.0より前)を使用している場合は、比較関数に名前を付け、その名前を文字列としてusort:に渡す必要があります。

function titlecmp($a, $b) {
  return strcmp($a->title, $b->title); 
}
usort($restrictedEvents, "titlecmp");
于 2012-11-07T20:18:31.890 に答える
-1

通常、このようなことは、を使用して2番目の配列を介して実現され$keyToSort => $id、標準の並べ替え関数または独自の関数を使用してこの配列を並べ替えると、最初の配列に変換されます。

これを使用すると、配列の深さは無制限になります。

于 2012-11-07T20:13:03.237 に答える