現在の位置: ホーム> 最新記事一覧> rsort並べ替え後にキー名が失われるのはなぜですか?この一般的な問題を解決する方法は?

rsort並べ替え後にキー名が失われるのはなぜですか?この一般的な問題を解決する方法は?

gitbox 2025-06-17

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」は完全に消え、連続数値インデックスになりました。


この問題を解決する方法は?

キー名で配列を並べ替えてキー名を変更しないようにする必要がある場合は、以下を考慮することができます。

1。ARSORT ()を使用します

Arsort()は、関連するキー名を持つ関数です。並べ替えの値を逆にし、キー名を変更せずに保つことができます。

例:

 <?php
$arr = [
    'a' => 3,
    'b' => 1,
    'c' => 2
];
arsort($arr);
print_r($arr);
?>

出力:

 Array
(
    [a] => 3
    [c] => 2
    [b] => 1
)

このようにして、キー名A、B、Cはそのまま保存されます。

2。uasort ()を使用して、ソートをカスタマイズします

照合をカスタマイズする必要がある場合は、 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
)

3.キー名のカスタムソートの例を保持します

配列構造がわずかに複雑な場合は、キーと価値のペアを抽出して、配列を構築する前にソートできます。


まとめ

  • 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を参照してください。