array_multisort 複数の多次元の配列をソートする 説明 boolarray_multisort arrayar1 mixedarg mixed... array... array_multisortは、複数の配列を一度に、また は、多次元の配列をその次元の一つでソートする際に使用可能です。 この関数は、ソートの際にキーの相関を維持します。 連想配列のキー(string)は不変ですが、数値添字は再度振り 直されます。 入力の配列は、あるテーブルのカラムで行をソートする処理が行われま す。これは、SQL ORDER BY構文と似ています。最初の配列はソートされ る最初の配列です。その配列の行が同じだった場合は、次の入力配列で ソートされるといったようになります。 この関数の引数の構造は、やや一般的ではありませんが、柔軟なもので す。先頭の引数は、配列である必要があります。その後の各引数には、 配列または次のリストにあるソート用フラグのどちらかを指定すること が可能です。 ソート方法指定フラグ: SORT_ASC - 昇順にソート SORT_DESC - 降順にソート ソート型のフラグ: SORT_REGULAR - 普通に比較 SORT_NUMERIC - 数値的に比較 SORT_STRING - 文字列として比較 各配列に同じ型のソート用フラグを二つ指定することは出来ません。 ある引数配列に適用を指定されたソート用フラグが適用されるのは、そ の配列のみです。新しい配列引数を処理する前にデフォルトの SORT_ASC およびSORT_REGULARにリセットします。 複数の配列をソートする ]]> この例では、ソートの後で、最初の配列は、10,"a", 100, 100となりま す。2番目の配列は、1, 1, "2", 3を有します。最初の配列(100および 100)の同じエントリに対応している2番目の配列のエントリは同時にソー トされます。 string(2) "10" [1]=> string(1) "a" [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(1) [1]=> int(1) [2]=> string(1) "2" [3]=> int(3) } ]]> 多次元の配列をソートする ]]> この例では、ソートされた後、最初の配列は10,100, 100, "a" (文字列 として昇順でソートされています)を有しており、2番目の配列は、 1, 3, "2", 1 (数値として降順にソートされています)となっています。 array(4) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> string(1) "a" } [1]=> array(4) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(1) } } ]]> Sorting database results For this example, each element in the data array represents one row in a table. This type of dataset is typical of database records. Example data: The data as an array, called data. This would usually, for example, be obtained by looping with mysql_fetch_assoc. 67, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 1); $data[] = array('volume' => 85, 'edition' => 6); $data[] = array('volume' => 98, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 6); $data[] = array('volume' => 67, 'edition' => 7); ?> ]]> In this example, we will order by volume descending, edition ascending. We have an array of rows, but array_multisort requires an array of columns, so we use the the below code to obtain the columns, then perform the sorting. $row) { $volume[$key] = $row['volume']; $edition[$key] = $row['edition']; } // Sort the data with volume descending, edition ascending // Add $data as the last parameter, to sort by the common key array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); ?> ]]> The dataset is now sorted, and will look like this: Case insensitive sorting Both SORT_STRING and SORT_REGULAR are case sensitive, strings starting with a capital letter will come before strings starting with a lowercase letter. To perform a case insensitve search, force the sorting order to be determined by a lowercase copy of the original array. &example.outputs; Alpha [1] => atomic [2] => bank [3] => Beta ) ]]>