ホームページ  >  記事  >  バックエンド開発  >  PHP 多次元配列ソート実装コード_PHP チュートリアル

PHP 多次元配列ソート実装コード_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:45:06816ブラウズ

array_multisort
(PHP 4, PHP 5)
array_multisort -- 複数の配列または多次元配列を並べ替えます
説明
bool array_multisort ( array ar1 [,mixed arg [,mixed ... [,array ...]]] )

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

SORT_ASC - 昇順でソート
SORT_DESC - 降順でソート

ソートタイプフラグ:

SORT_REGULAR - 通常の方法で項目を比較
SORT_NUMERIC - 項目を番号順で比較
SORT_STRING - 項目を比較降順 文字列比較

各配列の後に 2 つの同様の並べ替えフラグを指定することはできません。各配列の後に指定されたソート フラグは、その配列に対してのみ有効です。その前は、デフォルト値 SORT_ASC および SORT_REGULAR です。
例 1. 複数の配列を並べ替える

コードをコピーする コードは次のとおりです:

$ar1 = array("10", 100, 100, "a"); = array(1, 3, "2", 1);
array_multisort($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)=> int; 1)
[2]=> string(1) "2"
[3]=> int(3)
}


例 2. 多次元配列のソート


コードは次のとおりです:
$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1)); $ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC);
この例でソートすると、最初の配列には 10、100、100、"a" (文字列の昇順として) の場合、2 番目の配列には 1、3、"2"、1 (数値の降順として) が含まれます。
例 3. 多次元配列のソート



コードをコピー
コードは次のとおりです:


$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(11) [4]=>
[1] ]=> 配列(5) {
[0]=> int(1)
[2]=> 文字列(1) "2"
[3]= > int (2)
[4]=> int(1)
}
}


例 4. データベースの結果の並べ替え
この例では、データ配列の各セルがテーブル内の行を表します。これは、データベースに記録される典型的なデータのコレクションです。例のデータは次のとおりです:
ボリューム | エディション
-----+--------
67 | 2
86 | 6
98 | 6
67 | 7
データはすべて data という名前の配列に格納されます。これは通常、mysql_fetch_assoc() などのループを通じてデータベースから取得されます。


コードをコピーします

コードは次のとおりです:

$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('ボリューム' => 85, 'エディション' => 6);
$data[] = アレイ('ボリューム' => 98, 'エディション' => 2);
$data[] = array('ボリューム' => 86, 'エディション' => 6);
$data[] = アレイ('ボリューム' => 67, 'エディション' => 7);
?>

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

// 列のリストを取得します
foreach ($data as $key => $row) {
$volume[$ key] = $row ['volume'];
$edition[$key] = $row['edition']
}
// データをボリュームに従って降順に、エディションに従って昇順に並べます
// ユニバーサルキーソートで $data を最後のパラメータとして使用します


これでデータコレクションがソートされ、結果は次のようになります。
ボリューム |
------ +------
98 | 2
86 | 6
67 |

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



コードをコピー

コードは次のとおりです:
$array = array('Alpha', 'atomic', 'Beta', 'bank'); $array_ lowercase = array_map( 'strto lower' , $array);
array_ lowercase, SORT_ASC, SORT_STRING, $array); 上の例は次のように出力します:
Array
(
[0]) =>アルファ
[1] =>アトミック
[3] =>ベータ
)

【翻訳者注】この関数は非常に便利です。次の例:
例 6. ランキング
$grade = array("score" => array(70, 95, 70.0, 60, "70"),
"name" => array(" Zhang San"、"Li Si"、"Wang Wu"、
"Zhao Liu"、"Liu Qi"));
array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC,
// スコアを数値、順に並べ替えます
$grade["name"], SORT_STRING, SORT_ASC);
// 名前を小さい順に並べ替えます
var_dump($grade);
上記例は次のように出力されます:
array(2) {
["score"]=>
[0]=>
int(95)
[1]=> 70"
[2 ]=>
float(70)
[3]=>
int(70)
[4]=>
int(60)
}
["name"]=>
array(5) {
[0]=>
string(5) "Li Si"
[1]=>
string(6) "Liu Qi"
[2]=> Wang Wu"
[ 3]=>
string(9) "Zhang San"
[4]=>
string(8) "Zhao Liu"
}
}
この例では、成績を含む配列 $gradeスコア(スコア)に基づいて高い順に並べ替えられ、同じスコアを持つ人は小さい順に名前で並べ替えられます。並べ替えの結果、Li Si が 95 ポイントで 1 位、Zhao Liu が 60 ポイントで 5 位にランクされました。 Zhang San、Wang Wu、Liu Qi はいずれも 70 ポイントを獲得し、ランキングは名前のアルファベット順に並べられ、Liu が 1 位、Wang が 2 位、Zhang が最後でした。区別するために、3 つの 70 ポイントはそれぞれ整数、浮動小数点数、文字列で表され、それらのソート結果はプログラム出力で明確に確認できます。



http://www.bkjia.com/PHPjc/320429.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/320429.html

技術記事

array_multisort (PHP 4, PHP 5) array_multisort -- 複数の配列または多次元配列をソートする手順 bool array_multisort ( array ar1 [,mixed arg [,mixed ... [, array ...]]] ) If...

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

関連記事

続きを見る