Home > PHP | バグ > 最近ハマッタarray_multisort()

最近ハマッタarray_multisort()

array_multisort()は多次元配列をソートするわけだけども、ソートするキーの配列を作らないといけないのでめんどくさい。 (横配列→縦配列) そういうわけで下のようなものを作った。


/**
* $array = array(
*                 array('a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'e' => 4),
*                 array('a' => 4, 'b' => 3, 'c' => 2, 'd' => 1, 'e' => 0),
*                 array('a' => 2, 'b' => 3, 'c' => 4, 'd' => 0, 'e' => 1),
*                 array('a' => 0, 'b' => 4, 'c' => 3, 'd' => 2, 'e' => 1)
*          );
* multi_sort($array, 'a', SORT_ASC, 'b', SORT_DESC);
*
* @param &$array 多次元配列
* @param ... key1 [SORT_ASC|SORT_DESC] key2 [SORT_ASC|SORT_DESC] ...
*/
function multi_sort(&$array) {
    $args = func_get_args();
    $argc = func_num_args();
    $data = array();
    foreach ($array as $key => $val) {
        for ($i = 1; $i < $argc; $i+=2) {
            if (!array_key_exists($args[$i], $data)) $data[$args[$i]] = array();
                $data[$args[$i]][$key] = $val[$args[$i]];
            }
        }

        $arg_str = "";
        for ($i = 1; $i < $argc; $i+=2) {
            $arg_str .= '$data[' . "{$args[$i]}" . ']' . ",";
            $arg_str .= "{$args[$i+1]},";
        }
    }
    
    $array_str = '&$array';
    if (!eval("return array_multisort($arg_str $array_str);")) {
        return false;
    }
    return true;
}

しかし、これでハマッタわけで。 array_multisort()の最後の引数に配列のリファレンスやグローバル変数を渡すとソートされないらしい(PHP4)。でもリファレンスを渡すといいらしい。 なもんで、最初 $array_str = ‘$array’; としていたので上手くソートされずにムキィ!となったとさ。キーワード:php,array_multisort,ソート,多次元配列ソート,バグ

Comments:0

Comment Form
Remember personal info

Trackbacks:1

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=24
Listed below are links to weblogs that reference
最近ハマッタarray_multisort() from コスミー報告書[社外秘]
trackback from masomi79の日記 09-12-04 (金) 14:19

[PHP]多次元配列のソート。 ディレクトリの中身を array_multisort を使ってソートする

配列の初期化 $dirlist = array(); $udate = array();  ディレクトリ内のファイル名を取得して$strDirに格納             $filedir = ディレクトリ名; $strDir = opendir($filedir)or die(”couldnt open …

Home > PHP | バグ > 最近ハマッタarray_multisort()

Search
Feeds
Meta
 合計:011767
 今日:0095 昨日:0143

Return to page top