php には配列のソートに使用できる関数が多数あります。単純な 1 次元配列のソートであれば、php に付属しているソート関数を使用できますが、多次元配列の場合は自分で記述する必要があります。 。
帰ってきてからずっと気になっていたので本を調べて答えを見つけました。それらを覚えておくために、配列のソート関数についてまとめてみることにしました。
私が最初に遭遇したのは、PHP 配列のソートと降順の問題でした。
sort: この関数は、配列内のセルに新しいキー名を割り当てます。これにより、元のキーが単に並べ替えられるのではなく、削除されます。
rsort: この関数は、配列を逆順 (最高位から最低位) にソートします。 元のキー名を並べ替えるだけでなく、元のキー名を削除します。
asort: 配列をソートし、インデックスの関係を維持します
arsort: 配列を逆にソートし、インデックス関係を維持します
ksort: 配列をキー名でソートし、キー名とデータ間の関連付けを保持します
krsort: キー名とデータ間の関連付けを維持しながら、配列をキー名で逆順にソートします
natsort: 英数字文字列をソートし、元のキー/値の関連付けを維持します
natcasesort: natsort ソートアルゴリズムと同じですが、大文字と小文字を区別しません
PHP配列ソート(ソート)
数値インデックス配列のソート:
関数: sort(配列, [ソートタイプ])
説明: sort() 関数は、指定された配列 (最初のパラメーター) を昇順でソートします。
sort 関数の 2 番目のパラメーターは並べ替えの種類を指定するために使用され、オプションのパラメーターです。
SORT_REGULAR: デフォルト値、タイプを変更せずに並べ替えます
SORT_NUMERIC: 値を数値として並べ替えます
SORT_STRING: 値を文字列として並べ替えます
たとえば、配列に 4 と "37" がある場合、数値で並べ替えると 4 は "37" より小さくなり、文字列で並べ替えると 4 は "37" より大きくなります。
1. 1次元配列
次のような 1 次元配列があるとします。
$sortArr = array("名前"=>"ヒロ", "年齢"=>"23", "都市"=>"上海", "コード"=>"200051");
print_r() によって出力される元の配列の結果は次のとおりです:
配列 ( [名前] => hiro [年齢] => 23 [都市] => 上海 [コード] => 200051 )
1.sort() 関数: 配列の添字に従って昇順に並べ替えます。
print_r() によって出力される配列の結果は次のとおりです (配列の添字のみが出力され、キー名は出力されません):
1
配列 ( [0] => 23 [1] => 200051 [2] => 上海 [3] => hiro )
2.rsort() 関数: sort() 関数とは異なり、配列の添字に従って降順に並べられます。
print_r() によって出力される配列の結果は次のとおりです (配列の添字のみが出力され、キー名は出力されません):
配列 ( [0] => hiro [1] => 上海 [2] => 200051 [3] => 23 )
3.asort() 関数: 配列のキー名に従って昇順に並べ替えます。
print_r() によって出力される配列の結果は次のとおりです:
1
配列 ( [年齢] => 23 [コード] => 200051 [都市] => 上海 [名前] => hiro )
4.arsort() 関数: asort() 関数とは逆に、配列のキー名に従って降順に並べられます。
print_r() によって出力される配列の結果は次のとおりです:
Array ( [名前] => hiro [都市] => 上海 [コード] => 200051 [年齢] => 23 )
5.ksort() 関数: 配列のキー値に従って昇順に並べ替えます。
print_r() によって出力される配列の結果は次のとおりです:
配列 ( [年齢] => 23 [都市] => 上海 [コード] => 200051 [名前] => hiro )
6.krsort() 関数: ksort() 関数とは逆に、配列のキー値に従って降順に並べ替えます。
print_r() によって出力される配列の結果は次のとおりです:
コードは次のとおりです
コードをコピー
Array ( [名前] => hiro [都市] => 上海 [コード] => 200051 [年齢] => 23 )
|
|
7.reverse_array() 関数: 現在の配列の順序を反転します。
print_r() によって出力される配列の結果は次のとおりです:
| コードは次のとおりです
コードをコピー
配列 ( [名前] => hiro [年齢] => 23 [都市] => 上海 [コード] => 200051 )
8.shuffle() 関数: 配列の順序をランダムに配置します (順序は更新されるたびに異なります)。
print_r() によって出力される配列の結果は次のとおりです (ランダムな配置の 1 つにすぎません):
配列 ( [0] => 23 [1] => 200051 [2] => 上海 [3] => hiro )
2 番目の 2 次元配列
次のような 2 次元配列があるとします。
コードは次のとおりです
| コードをコピー
|
$person = 配列(
array("ヒロ", "23", "蘇州"),
array("ヨーヨー", "25", "上海"),
array("ジャンスター", "28", "新疆")
);
print_r() によって出力される元の配列の結果は次のとおりです:
1
配列 ( [0] => 配列 ( [0] => ヒロ [1] => 23 [2] => 蘇州 ) [1] => 配列 ( [0] => ヨーヨー [1] => 25 [2] => 上海 ) [2] => 配列 ( [0] => ジャンスター [1] => 28 [2] => 新疆 )
| 2 次元配列の並べ替えは各次元のキー名に基づいているため、追加の比較関数を記述する必要があります。まず 3 つの例を挙げてみましょう:
1. 各次元の最初の要素で昇順に並べ替えます。コードは次のとおりです。
コードは次のとおりです
コードをコピー
|
| 関数compare0($x, $y) {
if($x[0] == $t[0]) {
0 を返す;
elseif ($x[0] < $y[0]) {
-1 を返します;
} その他 {
1 を返します;
}
}
usort($person, Compare0);
echo "最初の要素で前方に並べ替えます:";
print_r($person);
出力結果は次のようになります:
1
最初の要素で前方に並べ替えます: Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [ 0] =>ジャンスター [1] => 28 [2] => 配列 ( [0] => ヨーヨー [1] => 25 [2] => 上海)
2. 各次元の 3 番目の要素で昇順に並べ替えます。コードは次のとおりです。
|
コードは次のとおりです
コードをコピー
| 関数compare2($x, $y) {
if($x[2] == $t[2]) { |
0 を返す;
elseif ($x[2] <$y[2]) {
-1 を返します;
} その他 {
1 を返します;
}
}
usort($person, Compare2);
echo "3 番目の要素で前方に並べ替えます:";
print_r($person);
出力結果は次のようになります:
3 番目の要素で前方に並べ替えます: Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [ 0] =>ヒロ [1] =>23 [2] =>配列 ( [0] =>28 [2] =>新疆)
3. 各次元の 3 番目の要素で昇順に並べ替えます。コードは次のとおりです。
コードは次のとおりです |
コードをコピー
関数 reverse_compare2($x, $y) {
if($x[2] == $t[2]) {
0 を返す; |
elseif ($x[2] <$y[2]) {
Return 1 //変更後は元に戻すことができます |
} その他 {
Return -1 //変更後は元に戻すことができます
}
}
usort($person, reverse_compare2);
echo "3番目の要素を逆順に並べ替えます:";
print_r($person);
出力結果は次のようになります:
1
3 番目の要素を逆順に並べ替えます:
コードは次のとおりです
| コードをコピー
|
Array ( [0] => Array ( [0] => ヤンスター [1] => 28 [2] => 新疆) [1] => Array ( [0] => ヒロ [1] ] => 23 [2] => 蘇州 ) [2] => 配列 ( [0] => ヨーヨー [1] => 25 [2] => 上海 )
|
はは、コードが多すぎるので、後で簡単に参照できるようにメモしておいてください。
例
コードは次のとおりです
| コードをコピー
|
エラー報告(0);
/**
* @Number 配列の並べ替えは、大きいものから小さいもの、または小さいものから大きいものに並べ替えることができます */
関数 sortArray($array, $choice) {
$values = array_values($array) // 数値インデックス付きの配列を作成します ;
$ch = $choice==0 ? min:max; // パラメータ $choice が 0 の場合、順序は小さいものから大きいものへ、それ以外の場合はデフォルトで大きいものから小さいものの順に配置されます
やります{
$val = $ch($values) // 最大値または最小値を見つけます ;
$key = array_search($val,$values) // 最大値のキー名を取得します ;
$result[$key] = $val // 新しい配列に最大値を格納します ;
unset($values[$key]);
while (count($values) > 0);
$result を返します;
}
$配列 = 配列(100, 1000, 1, 10000);
//$array = sortArray($array, 0);
$array = sortArray($array, 1);
foreach($array as $a) {
エコー "$a ";
}
?>
|
|
http://www.bkjia.com/PHPjc/631245.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631245.html技術記事 PHP では配列のソートに使用できる関数が多数あり、単純な 1 次元配列のソートであれば PHP 独自のソート関数を使用できますが、多次元配列の場合は自分で記述する必要があります。 ...
声明:この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。