多くの場合、開発者は、PHP でこのデータ構造を使用して値または配列要素を並べ替えると便利だと考えます。 PHP には、さまざまな配列に対していくつかの並べ替え関数が用意されています。これらの関数を使用すると、配列内の要素を配置したり、さまざまな方法で要素を並べ替えたりすることができます。この記事では、この並べ替えにおける最も重要な機能のいくつかについて説明します。
単純な並べ替え
まず、最も単純なケースを見てみましょう。この関数は、単純に配列要素を数値順またはアルファベット順に並べ替えます。リスト A に示すように、PHP の sort() 関数はこの関数を実装します。
リスト A
コードをコピー コードは次のとおりです。 , 7,2);
print_r($data);
?> 1
[1] => 2
[3] => ; 7
[4] => 8
)
は、rsort() 関数の並べ替えを使用して実行することもできます。その結果は、以前に使用した sort() の単純な並べ替え結果とは逆になります。 Rsort() 関数は、配列要素を数値順またはアルファベット順に高い順に並べ替えます。リスト B はその例を示しています。
リスト B
コードをコピー コードは次のとおりです:
?>
コードをコピーします
コードは次のとおりです:
Array ([0] => ; 8
[1] => 7
[2] => 5 [3] => 2 [4] => 1 キーワードに基づいて並べ替えます。多くの場合、配列は上位から下位に並べ替えられます。 Ksort() 関数は、キーワードに従ってソートすると同時に、ソート処理中にキーワードの関連性を維持する関数です。リスト C は例です: リスト C
コードをコピー
コードは次のとおりです:
“United States”, “IN” = > “ インド”, "DE" => "ドイツ", "ES" => "スペイン");ksort($data); print_r($data); ?> その出力は次のようになります次のとおりです:
コードをコピーします
コードは次のとおりです:
Array ([DE] => ドイツ
[ES] => スペイン
[IN] => インド
[US] = > 米国
)
Krsort() 関数は、キーワードに従って配列を並べ替えます。 リスト D
コードをコピーします。
コードは次のとおりです。 "米国", "IN" => "インド", "DE" => "ドイツ", "ES" => "スペイン") ;krsort($data); print_r($
ES] => スペイン
[DE] => ドイツ
)
値による並べ替え キーワードによる並べ替えの代わりに値による並べ替えを使用したい場合、PHP は次の条件を満たすこともできます。要件。前に述べた ksort() 関数の代わりに asort() 関数を使用するだけです。リスト E に示すように: リスト E
コードをコピー
コードは次のとおりです:
“United States”, “IN” = > “ インド”、 "DE" => "ドイツ"、 "ES" => "スペイン");asort($data); print_r($data);
?>
以下はその出力です。この結果と、上記の ksort() 関数を使用して取得した結果の違いに注意してください。どちらの場合も、並べ替えはアルファベット順に行われますが、配列の異なるフィールドに従って並べ替えられます。
同時に、キーワードと値の関係は常に維持されることに注意してください。これはキーワードと値のペアを並べ替える単なる方法であり、並べ替えによってそれらの対応関係が変わるわけではありません。
配列 ([DE] => ドイツ
[IN] => インド
[ES] => スペイン
[US] => 米国
)
さて、この並べ替えも機能することは間違いなく推測できます。逆変換を実行するには、arsort() 関数を使用してこの機能を実行します。リスト F は例です。
リスト F
コードをコピー コードは次のとおりです:
“United States”, “IN” = > “ インド”, "DE" => "ドイツ", "ES" => "スペイン");arsort($data); print_r($data);
?>
以下は出力、値によってアルファベット順に並べ替えます。次の結果と、krsort() 関数を使用して反転した後に生成された結果を比較すると、2 つの違いが簡単に理解できます。
コードをコピーします コードは次のとおりです:
Array ([US] => 米国
[ES] => スペイン
[IN] => インド
[DE] => ; ドイツ
)
自然言語による並べ替え
PHP には、計算ルールではなく認知を使用する非常にユニークな並べ替え方法があります。この機能は自然言語ランキングと呼ばれ、ファジー ロジック アプリケーションを作成する場合に非常に役立ちます。以下に、リスト G に示す簡単な例を示します。
リスト G
コードをコピーします コードは次のとおりです:
natsort($data); >
出力は次のとおりです:
コードをコピーします コードは次のとおりです:
Array ([0] => book-1
[1] => book-10
[2] => ブック-100
[3] => ブック-5
)
配列
(
[0] => ブック-1
[3] => ブック-5
[1] => ブック-10
[2 ] => book-100
)
違いはすでに非常に明らかです。2 番目の並べ替え結果はより直感的で、より「人間化」されていますが、最初の並べ替え結果はアルゴリズムのルールとより一致しています。より「コンピュータ」の特性を持っています。
自然言語は倒置を実行できますか?答えは「はい」です! natsort() の結果に対して array_reverse() 関数を使用するだけです。 リスト H は簡単な例です。
リスト H
コードをコピーします。 コードは次のとおりです。
?>
以下はその出力結果です:
コードをコピー コードは次のとおりです:
Array ([0] => book-100
[1] => book-10
[2] => ; book-5
[ 3] => book-1
)
ユーザー定義のルールに従って並べ替える
PHP では独自の並べ替えアルゴリズムを定義することもできます。独自の比較関数を作成して渡すことでこれを行うことができます。 usort() 関数に。最初のパラメータが 2 番目のパラメータより「小さい」場合、比較関数は 0 より小さい数値を返す必要があります。最初のパラメータが 2 番目のパラメータより「大きい」場合、比較関数は 0 より大きい数値を返す必要があります。
リスト I はその例の 1 つで、配列要素が長さに従ってソートされ、最も短い項目が先頭になります。
リスト I
コードをコピー コードは次のとおりです。 $data = array("joe@host.com", "john.doe@gh.co.uk", "asmithsonian@us.info", "jay@zoo.tw");usort($data, ' sortByLen' ); print_r($data); 関数 sortByLen($a, $b) { if (strlen($a) == strlen($b)) {
return 0;
return ($ a) > strlen($b))
}
?>
このようにして、独自の比較関数を作成します。この関数は strlen() 関数を使用して各文字列の数を比較し、それぞれ 1、0、または -1 を返します。この戻り値は、文字列の配置を決定するための基礎となります。要素。以下はその出力です:
コードをコピーします コードは次のとおりです:
Array ([0] => jay@zoo.tw
[1] => joe@host.com
[2] => john.doe@gh.co.uk
[3] => asmithsonian@us.info
)
自然言語による並べ替え
PHP には、計算ルールを使用します。この機能は自然言語ランキングと呼ばれ、ファジー ロジック アプリケーションを作成する場合に非常に役立ちます。以下に、リスト G に示す簡単な例を示します。
リスト G
コードをコピーします コードは次のとおりです:
natsort($data); >
出力は次のとおりです:
コードをコピーします コードは次のとおりです:
Array ([0] => book-1
[1] => book-10
[2] => ブック-100
[3] => ブック-5
)
配列
(
[0] => ブック-1
[3] => ブック-5
[1] => ブック-10
[2 ] => book-100
)
違いはすでに非常に明らかです。2 番目の並べ替え結果はより直感的で、より「人間化」されていますが、最初の並べ替え結果はアルゴリズムのルールとより一致しています。より「コンピュータ」の特性を持っています。
自然言語は倒置を実行できますか?答えは「はい」です! natsort() の結果に対して array_reverse() 関数を使用するだけです。 リスト H は簡単な例です。
リスト H
コードをコピーします。 コードは次のとおりです。
?>
以下はその出力結果です:
コードをコピー コードは次のとおりです:
Array ([0] => book-100
[1] => book-10
[2] => ; book-5
[ 3] => book-1
)
ユーザー定義のルールに従って並べ替える
PHP では独自の並べ替えアルゴリズムを定義することもできます。独自の比較関数を作成して渡すことでこれを行うことができます。 usort() 関数に。最初のパラメータが 2 番目のパラメータより「小さい」場合、比較関数は 0 より小さい数値を返す必要があります。最初のパラメータが 2 番目のパラメータより「大きい」場合、比較関数は 0 より大きい数値を返す必要があります。
リスト I はその例の 1 つで、配列要素が長さに従ってソートされ、最も短い項目が先頭になります。
リスト I
コードをコピー コードは次のとおりです。 $data = array("joe@host.com", "john.doe@gh.co.uk", "asmithsonian@us.info", "jay@zoo.tw");usort($data, ' sortByLen' ); print_r($data); 関数 sortByLen($a, $b) { if (strlen($a) == strlen($b)) {
return 0;
return ($ a) > strlen($b)) ? 1 : -1;
}
}
このようにして、strlen() 関数を使用してそれぞれの数値を比較します。この戻り値は、要素の配置を決定するための基礎となります。以下はその出力です:
コードをコピーします
コードは次のとおりです:
Array ([0] => jay@zoo.tw [1] => joe@host.com [2] => john.doe@gh.co.uk [3] => asmithsonian@us.info )
多次元ソート
最後に、PHP では、多次元配列に対してさらに複雑なソートを実行することもできます。 - たとえば、最初に共通キーを使用してネストされた配列を並べ替え、次に別のキーに基づいて並べ替えます。これは、SQL の ORDER BY ステートメントを使用して複数のフィールドを並べ替えるのとよく似ています。どのように動作するかをよりよく理解するために、リスト J の例を注意深く見てください:
リスト J
コードをコピーします
コードは次のとおりです:
1, “name” => “Boney M”, “評価” => 3),
array(“id” => 2, “名前” => “テイク・ザット”, “評価” => 1),
array(“id” => 3, “名前” => “ザ・キラーズ”, “評価” => 4),
array(“id” => 4, “name” => “Lusain”, “評価” => 3),
); foreach ($data as $key => $value) {
$name[$key] = $value['name'];
$評価[$key] = $value['評価']
}
array_multisort($rated, $name, $data); data);?>
ここでは、$data 配列の行と列の配列をシミュレートします。次に、array_multisort() 関数を使用して、最初に評価によってデータ セットを並べ替えます。次に、評価が等しい場合は名前によってデータ セットを並べ替えます。出力は次のとおりです:
コードをコピー コードは次のとおりです:
Array ([0] => Array
(
[id] => 2
[name] => Takeその
[評価] => 1
) [1] => 配列
(
[id] => 1
[名前] => ボニー M
[評価] => 3
)
[2] => 配列
(
[id] => 4
[名前] => ルサイン
[評価] => 3
)
[3] => 配列
(
[id] => 3
[名前] => The Killers
[評価] => 4
)
)
array_multisort() 関数は、PHP で最も便利な関数の 1 つであり、非常に幅広い用途があります。さらに、この例でわかるように、無関係な複数の配列を並べ替えたり、1 つの要素を次の並べ替えの基礎として使用したり、データベースの結果セットを並べ替えたりすることもできます。
これらの例は、PHP でのさまざまな配列ソート関数の使用方法を予備的に理解し、PHP 配列処理ツールキットに隠されている内部関数のいくつかも示します。
http://www.bkjia.com/PHPjc/322344.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/322344.html技術記事多くの場合、開発者は、PHP でこのデータ構造を使用して値または配列要素を並べ替えると便利だと考えます。 PHP は、さまざまな種類の配列に適したソート関数をいくつか提供しています。これらの関数により...