★ wanayoo — archive 1999 http://fr.php.net/manual/ja/function.array-multisort.phpNouvelle recherche | Portail wanayoo
PHP  
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
search for in the  
<array_mergearray_pad>
view the version of this page
Last updated: Wed, 09 Mar 2005

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 (数値として降順にソートされています)となっています。



add a note add a note User Contributed Notes
array_multisort
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

<array_mergearray_pad>
 Last updated: Wed, 09 Mar 2005
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This mirror generously provided by: nexen.net
Last updated: Fri Mar 18 05:13:58 2005 CET