PHPでは、多くの場合、さまざまな並べ替え関数を使用して配列をソートします。 rsort()は、ソート配列を逆転させるために使用される一般的な関数の1つです(大部分から小まで)。ただし、多くの開発者は、 rsort()を使用した後、配列のキー名がリセットされ、元のキー名が失われることを発見しました。これにより、多くの人が連想配列に対処するのに苦労します。
rsort()は、インデックス配列(数値キー)をソートするために特異的に設計された関数です。配列のインデックスを再構築します。つまり、0から始まるインデックスを自動的にインデックスします。値をソートし、連続数値インデックスを生成するように設計されているため、元のキー名を保持しません。
簡単に言えば、 rsort()は、通常の数値配列に適した値と再インデックスアレイでソートされます。
例えば:
<?php
$arr = [
'a' => 3,
'b' => 1,
'c' => 2
];
rsort($arr);
print_r($arr);
?>
出力の結果は次のとおりです。
Array
(
[0] => 3
[1] => 2
[2] => 1
)
ご覧のとおり、元のキー名「A」、「B」、「C」は完全に消え、連続数値インデックスになりました。
キー名で配列を並べ替えてキー名を変更しないようにする必要がある場合は、以下を考慮することができます。
Arsort()は、関連するキー名を持つ関数です。並べ替えの値を逆にし、キー名を変更せずに保つことができます。
例:
<?php
$arr = [
'a' => 3,
'b' => 1,
'c' => 2
];
arsort($arr);
print_r($arr);
?>
出力:
Array
(
[a] => 3
[c] => 2
[b] => 1
)
このようにして、キー名A、B、Cはそのまま保存されます。
照合をカスタマイズする必要がある場合は、 uasort()を使用できます。これは、キー名を変更せずに保ちます。
<?php
$arr = [
'a' => 3,
'b' => 1,
'c' => 2
];
uasort($arr, function($x, $y) {
return $y <=> $x; // 逆ソート
});
print_r($arr);
?>
出力:
Array
(
[a] => 3
[c] => 2
[b] => 1
)
配列構造がわずかに複雑な場合は、キーと価値のペアを抽出して、配列を構築する前にソートできます。
rsort()は、通常のインデックスアレイソートに適したアレイにインデックスするため、キー名を失います。
キー名を保持する必要がある場合は、 arsort()またはuasort()を使用する必要があります。
Arsort()は値を直接逆転させ、キー名を保存します。
uasort()は、ソートロジックをカスタマイズし、柔軟性を高めることができます。
これらの機能の違いと使用をマスターすると、PHPアレイのソートをより効率的にし、キー名の欠落によって引き起こされる問題を回避できます。
<?php
// 上記を組み込んだこれの完全な例
$arr = [
'a' => 3,
'b' => 1,
'c' => 2
];
// エラーデモンストレーション:rsortキー名は失われます
rsort($arr);
print_r($arr);
echo "\n";
// 正しいデモンストレーション:使用arsort保持键名逆ソート
$arr = [
'a' => 3,
'b' => 1,
'c' => 2
];
arsort($arr);
print_r($arr);
echo "\n";
// カスタムソートデモンストレーション uasort
$arr = [
'a' => 3,
'b' => 1,
'c' => 2
];
uasort($arr, function($x, $y) {
return $y <=> $x; // 逆ソート
});
print_r($arr);
?>
その他のPHPアレイソートのヒントについては、 gitbox.net/ docs/php-arraysを参照してください。