|
|
 |
array_multisort (PHP 4 , PHP 5) array_multisort -- 複数の多次元の配列をソートする 説明bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]])
array_multisort()は、複数の配列を一度に、また
は、多次元の配列をその次元の一つでソートする際に使用可能です。
この関数は、ソートの際にキーの相関を維持します。
入力の配列は、あるテーブルのカラムで行をソートする処理が行われま
す。これは、SQL ORDER BY構文と似ています。最初の配列はソートされ
る最初の配列です。その配列の行が同じだった場合は、次の入力配列で
ソートされるといったようになります。
この関数の引数の構造は、やや一般的ではありませんが、柔軟なもので
す。先頭の引数は、配列である必要があります。その後の各引数には、
配列または次のリストにあるソート用フラグのどちらかを指定すること
が可能です。
ソート方法指定フラグ:
SORT_ASC - 昇順にソート SORT_DESC - 降順にソート
ソート型のフラグ:
SORT_REGULAR - 普通に比較 SORT_NUMERIC - 数値的に比較 SORT_STRING - 文字列として比較
各配列に同じ型のソート用フラグを二つ指定することは出来ません。
ある引数配列に適用を指定されたソート用フラグが適用されるのは、そ
の配列のみです。新しい配列引数を処理する前にデフォルトのSORT_ASC
およびSORT_REGULARにリセットします。
成功した場合に TRUE 、失敗した場合に FALSE を返します。
例 1. 複数の配列をソートする |
<?php
$ar1 = array ("10", 100, 100, "a");
$ar2 = array (1, 3, "2", 1);
array_multisort ($ar1, $ar2);
?>
|
|
この例では、ソートの後で、最初の配列は、10,"a", 100, 100となりま
す。2番目の配列は、1, 1, "2", 3を有します。最初の配列(100および
100)の同じエントリに対応している2番目の配列のエントリは同時にソー
トされます。
例 2. 多次元の配列をソートする |
<?php
$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1));
array_multisort ($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
?>
|
|
この例では、ソートされた後、最初の配列は10,100, 100, "a" (文字列
として昇順でソートされています)を有しており、2番目の配列は、
1, 3, "2", 1 (数値として降順にソートされています)となっています。
Toni
10-Nov-2004 12:30
An example to sort an array by 3 criteria:
$recordset is an array of results from a query to a database, that I sort using $matrix as auxiliary array. First numeric, Second and Third alphabetically.
<?php
for($idx=0;$idx<$toShow;$idx++){
$matrix[0][$id]=$recordset[$id][0];
$matrix[1][$id]=$recordset[$id][1];
$matrix[2][$id]=$recordset[$id][10];
}
array_multisort($matrix[0], SORT_DESC, SORT_NUMERIC,$matrix[1], SORT_STRING, SORT_ASC,$matrix[2], SORT_STRING, SORT_ASC);
?>
meddle at dzygn.com
05-Oct-2004 04:40
If you want to sort a multidomensional array by key name you cannot use array_multisort. ie: for an array named $archivos that prints like this:
Array
(
[0] => Array
(
[index] => 0
[name] => test
)
[1] => Array
(
[index] => 0
[name] => watertaxi.jpg
)
[2] => Array
(
[index] => 0
[name] => 2_0003.JPG
)
[3] => Array
(
[index] => 0
[name] => 24A_0025.JPG
)
[4] => Array
(
[index] => 1
[name] => _CIMG3501.JPG
)
)
If I wanted to order by "name" I'd use:
function comparar($a, $b) {
return strnatcasecmp($a["name"], $b["name"]);
}
usort($archivos, "comparar");
This function performs a case insensitive string comparison using a "natural order" algorithm (strnatcasecmp), resulting in:
Array
(
[0] => Array
(
[index] => 0
[name] => 2_0003.JPG
)
[1] => Array
(
[index] => 0
[name] => 24A_0025.JPG
)
[2] => Array
(
[index] => 0
[name] => test
)
[3] => Array
(
[index] => 0
[name] => watertaxi.jpg
)
[4] => Array
(
[index] => 1
[name] => _CIMG3501.JPG
)
)
kat dot n0spam at audiogalaxy dot com
24-Aug-2001 07:25
If you're having problems with array_multisort changing variables in global space when it is called inside a function and you're not passing in the function parameters by reference you can alleviate the problem by calling array_multisort with its parameters by reference.
array_multisort(&$a, SORT_DESC, &$b);
More details here in my bug report:
http://www.php.net/bugs.php?id=12936
| |