[PHP-users 15472]Re: ユーザー定義の比較関数により値で配列をソートする方法(usort)について

Kentaro Yoshida php @ jcom.home.ne.jp
2003年 5月 25日 (日) 16:02:55 JST


setoさん、ありがとうございます。

> ご自分で提示されたURLをごらんになったなら
> 「挙動不審な動き」ではなく
> 「どのような結果となり」「どう納得がいかないのか(期待する動作)」を
> かかれたほうが良いと思います。
> # 先のURLの中でもMashikiさんがそのようにかかれてますよね :)
今後からそうしようと思います。
> 
> 手元の環境で試してみましたが
> 最初に配列定義した順番が usortした結果の順番に反映されないということ
> つまり
>> Array (
>>    [0] => 5    http://www.yahoo.co.jp/?6732    yahoo
>>    [1] => 5    http://google.co.jp    google
>>    [2] => 1    http://www.example.net    example - Home
>>    [3] => 64    http://www.hoge.to    hoge
>> )
> の[0]と[1]が usort した結果では 逆転しているということを
> 挙動不審といわれているのでしょうか。
> 
> としたらマニュアルにあるように
>  2つのメンバーの比較結果が等しいとなった場合、
>  ソートされた配列の順番は定義されません。
> ということですので 正しい動作と言うことになりますね。
> 
> 元配列データをもっとたくさんにして
> 使用関数の頭で 引数を 出力して見ましたが
> 複雑な順番で処理をしているようです。
> ぱっと見た限りではどのような規則性なのか私には理解できませんでした。
> ですから 必ず逆転するという規則ではないようです。
> # ソースもみてません。
> 


本当にすみません。配列が[0]のときの外部の処理エラーがからんで挙動不審
(配列の最後にとばされてしまう)になっていました?迷惑をお掛けしてすみませんでした。

やりたかったことは
Array
(
    [0] => 5    http://www.yahoo.co.jp/?6732    yahoo

    [1] => 5    http://google.co.jp    google

    [2] => 1    http://www.example.net    example - Home

    [3] => 64    http://www.hoge.to    hoge

)

を、usortで

Array
(
    [0] => 64    http://www.hoge.to    hoge

    [1] => 5    http://google.co.jp    google

    [2] => 5    http://www.yahoo.co.jp/?6732    yahoo

    [3] => 1    http://www.example.net    example - Home
)

とする事でした。




PHP-users メーリングリストの案内