[PHP-users 25185] 配列内のあるキーを元にソートする方法について

mmfaq_mail @ yahoo.co.jp mmfaq_mail @ yahoo.co.jp
2005年 3月 30日 (水) 12:14:22 JST


お世話になっていますmfと申します。

配列のソートに関してハマッてしまい、2日くらい打開策が見つけられず
にMLに投稿させていただきました。

今、下記のような配列があり、それをkeyを元にソートしたいんですが方法が
見つけられません。(配列の結果をprint_rで出力したものです)
問題はソートの方法なんですが、keyで指定した番号順にソートするのはusort
などの関数を調べるとすぐにできるのですが、keyが未入力の場合はそのままの
順位を保持しつつ、keyが入力されている項目の値がある場合のみ、その順位に
差込むようなソートをしたいのです。

//*********
//ソート前
//*********
Array
(
    [0] => Array
        (
            [id] => a
            [key] => 
        )
    [1] => Array
        (
            [id] => b
            [key] => 4
        )
    [2] => Array
        (
            [id] => c
            [key] => 
        )
    [3] => Array
        (
            [id] => d
            [key] => 1
        )
    [4] => Array
        (
            [id] => e
            [key] => 
        )
    [5] => Array
        (
            [id] => f
            [key] => 2
        )
    [6] => Array
        (
            [id] => g
            [key] => 
        )
)


//*********
//求めたいソート結果
//*********
Array
(
    [3] => Array
        (
            [id] => d
            [key] => 1
        )
    [5] => Array
        (
            [id] => f
            [key] => 2
        )
    [0] => Array
        (
            [id] => a
            [key] => 
        )
    [1] => Array
        (
            [id] => b
            [key] => 4
        )
    [2] => Array
        (
            [id] => c
            [key] => 
        )
    [4] => Array
        (
            [id] => e
            [key] => 
        )
    [6] => Array
        (
            [id] => g
            [key] => 
        )
)

Array[0]がkeyがなにも入力されていないので、そのまま3番目に残り
keyが入力されているArray[1]が4番目(keyで4と指定)に移り、後は
元の順位を保持したまま出力されるような結果を求めたいと思っています。

usortを使うと単純にkeyのみを見てソートしてしまい、未入力のものは
keyがnull扱いになりArray[0]がArray[1]の下にくるようになりました。

なにかうまいソート方法はあるのでしょうか?
なにか解決の糸口をつかみたいと思っています。
よろしくお願いいたします。

mf


__________________________________
Do You Yahoo!?
Upgrade Your Life
http://bb.yahoo.co.jp/



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