ホームページ  >  記事  >  バックエンド開発  >  array_multisort 関数を使用して複数の配列または多次元配列を並べ替えるにはどうすればよいですか?

array_multisort 関数を使用して複数の配列または多次元配列を並べ替えるにはどうすればよいですか?

伊谢尔伦
伊谢尔伦オリジナル
2017-06-26 11:33:001535ブラウズ

array_multisort() を使用すると、複数の配列を一度に並べ替えたり、特定の次元または複数の次元に従って 多次元配列 を並べ替えたりすることができます。

array_multisort — 複数の配列または多次元配列をソートする
説明
bool array_multisort ( array ar1 [,mixed arg [,mixed ... [, array ...]]] )
array_multisort
(PHP 4, PHP 5 )
Returns成功した場合は TRUE、失敗した場合は FALSE を返します。
array_multisort() を使用すると、複数の配列を一度に並べ替えたり、1 つ以上の次元に従って多次元配列を並べ替えたりできます。
連想 (文字列) キー名は変更されませんが、数値キー名は再インデックスされます。
入力配列はテーブルの列として扱われ、行ごとに並べ替えられます。これは SQL の ORDER BY 句の機能と似ています。最初の配列は、ソートされるメインの配列です。配列内の行 (値) が同じであると比較された場合、次の入力配列内の対応する値のサイズに従って並べ替えられます。
この 関数のパラメーター は、やや特殊な構造をしていますが、非常に柔軟です。最初のパラメータは配列である必要があります。次の各引数には、以下にリストされている配列または並べ替えフラグを指定できます。

ソート順序フラグ:
SORT_ASC – 昇順でソート

SORT_DESC – 降順でソート
ソートタイプフラグ:
SORT_REGULAR – 通常の方法で項目を比較

SORT_NUMERIC – 項目を番号順で比較

SORT _STRING – strings に従って項目を比較します。
各配列の後に同じタイプの 2 つの並べ替えフラグを指定することはできません。各配列の後に指定されたソート フラグは、その配列に対してのみ有効です。それ以前は、デフォルト値 SORT_ASC および SORT_REGULAR が使用されていました。

例 1. 複数の arrays を並べ替える

<?php 
$ar1 = array(“10″, 100, 100, “a”); 
$ar2 = array(1, 3, “2″, 1); 
array_multisort($ar1, $ar2); 
var_dump($ar1); 
var_dump($ar2); 
?>

この例では、並べ替え後の最初の配列には "10"、"a"、100、100 が含まれます。 2 番目の配列には 1,1,"2",3 が含まれます。 2 番目の配列内の項目の順序は、最初の配列内の対応する項目 (100 と 100) の順序とまったく同じです。

array(4) { 
[0]=> 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) 
}

例 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 (数値の降順)。
例3. 多次元配列のソート

<?php 
$ar = array( 
array(“10″, 11, 100, 100, “a”), 
array( 1, 2, “2″, 3, 1) 
); 
array_multisort($ar[0], SORT_ASC, SORT_STRING, 
$ar[1], SORT_NUMERIC, SORT_DESC); 
var_dump($ar); 
?>

この例では、ソート後、最初の配列は "10", 100, 100, 11, "a" (昇順の文字列として扱われます) になります。 2 番目の配列には、1、3、「2」、2、1 (降順で数値として扱われます) が含まれます。

array(2) { 
[0]=> array(5) { 
[0]=> string(2) “10″ 
[1]=> int(100) 
[2]=> int(100) 
[3]=> int(11) 
[4]=> string(1) “a” 
} 
[1]=> array(5) { 
[0]=> int(1) 
[1]=> int(3) 
[2]=> string(1) “2″ 
[3]=> int(2) 
[4]=> int(1) 
} 
}

例 4. データベースの結果を並べ替える
この例では、データ配列の各セルがテーブル内の行を表します。これは、データベースに記録される典型的なデータのコレクションです。例のデータは次のとおりです:
ボリューム | エディション
86 | 6
86 |
67 |すべてはデータの配列で指定されたファイルに保存されます。これは通常、
mysql_fetch_assoc
() などのループを介してデータベースから取得されます。

<?php 
$data[] = array(‘volume&#39; => 67, ‘edition&#39; => 2); 
$data[] = array(‘volume&#39; => 86, ‘edition&#39; => 1); 
$data[] = array(‘volume&#39; => 85, ‘edition&#39; => 6); 
$data[] = array(‘volume&#39; => 98, ‘edition&#39; => 2); 
$data[] = array(‘volume&#39; => 86, ‘edition&#39; => 6); 
$data[] = array(‘volume&#39; => 67, ‘edition&#39; => 7); 
?>

この例では、ボリュームは降順でソートされ、エディションは昇順でソートされます。
これで行を含む配列ができましたが、array_multisort() には列を含む配列が必要なので、次のコードを使用して列を取得し、並べ替えます。 rreee
結果は次のようになります:

ボリューム | エディション
98 | 1
86 | 6

67 |

67 | 7

例 5. 大文字と小文字を区別しない並べ替え
SORT_STRING と SORT_REGULAR は大文字と小文字が区別され、大文字は小文字よりも前に並べ替えられます。
大文字と小文字を区別しない並べ替えを実行するには、元の配列の小文字のコピーに従って並べ替えます。

<?php 
// 取得列的列表 
foreach ($data as $key => $row) { 
$volume[$key] = $row[&#39;volume&#39;]; 
$edition[$key] = $row[&#39;edition&#39;]; 
} 
// 将数据根据 volume 降序排列,根据 edition 升序排列 
// 把 $data 作为最后一个参数,以通用键排序 
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 
?>

上記の例は次のように出力します:

Array 
( 
[0] => Alpha 
[1] => atomic 
[2] => bank 
[3] => Beta 
)

补充资料:
对于PHP语言中的多维数组排序时最为复杂的一个排序方式。我们在实际编码中将会用到PHP函数array_multisort()来实现这一复杂的排序。例如,首先对一个嵌套数组使用一个普通的关键字进行排序,然后再根据另一个关键字进行排序。这与使用SQL的ORDER BY语句对多个字段进行排序非常相似。
PHP函数asort()利用值排序的具体方式解析
PHP函数arsort()的功能特点详解
PHP自然语言排序的特点介绍
PHP自然语言倒序的具体实现方式
如何运用PHP函数usort()实现自定义排序
Listing J示例为我们具体说明了PHP函数array_multisort()的工作方式:
1, "name" => "Boney M", "rating" => 3), array("id" => 2, "name" => "Take That", "rating" => 1), array("id" => 3, "name" => "The Killers", "rating" => 4), array("id" => 4, "name" => "Lusain", "rating" => 3), ); foreach ($data as $key => $value) { $name[$key] = $value[name]; $rating[$key] = $value[rating]; } array_multisort($rating, $name, $data); print_r($data);?> 这里,我们在$data数组中模拟了一个行和列数组。然后,我使用PHP函数array_multisort()对数据集合进行重排,首先是根据rating进行排序,然后,如果rating相等的话,再根据name排序。它的输出结果如下: 

Array ([0] => Array 
( 
[id] => 2 
[name] => Take That 
[rating] => 1 
) [1] => Array 
( 
[id] => 1 
[name] => Boney M 
[rating] => 3 
) 
[2] => Array 
( 
[id] => 4 
[name] => Lusain 
[rating] => 3 
) 
[3] => Array 
( 
[id] => 3 
[name] => The Killers 
[rating] => 4 
) 
)

PHP函数array_multisort()是PHP中最有用的函数之一,它有非常广泛的应用范围。另外,就如你在例子中所看到的,它能对多个不相关的数组进行排序,也可以使用其中的一个元素作为下次排序的基础,还可以对数据库结果集进行排序。

以上がarray_multisort 関数を使用して複数の配列または多次元配列を並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。