現在の位置: ホーム> 最新記事一覧> Array_flip()がデータを失うのはなぜですか?ページング値の重複によって引き起こされる問題

Array_flip()がデータを失うのはなぜですか?ページング値の重複によって引き起こされる問題

M66 2025-05-14

PHPプログラミングでは、 array_flip()は、配列のキーと値をペアリングできる一般的に使用される関数です。ただし、多くの開発者は、使用中に「データ損失」の問題に遭遇する可能性があります。特に、配列に重複した値がある場合。それで、何が起こっているのですか?この記事では、array_flip()の動作を詳細に説明し、例を使用してその背後にある原則を理解するのに役立ちます。

1。array_flip()とは何ですか?

array_flip()は、phpの内蔵配列関数であり、配列のキーと値を交換するために使用されます。基本的な構文は次のとおりです。

 array_flip(array $array): array

その機能は、入力配列内の各キーと値を比較することであり、元の値が新しいキーになり、元のキーが新しい値になります。

例:

 $input = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'cherry'
];

$result = array_flip($input);

print_r($result);

出力は次のとおりです。

 Array
(
    [apple] => a
    [banana] => b
    [cherry] => c
)

キーと値が問題なく正常に往復したことがわかります。

2。問題が発生する場合:値を複製します

元の配列に値が重複している場合、array_flip()はどうなりますか?

例を見てみましょう:

 $input = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'apple'
];

$result = array_flip($input);

print_r($result);

出力:

 Array
(
    [banana] => b
    [apple] => c
)

ここには重要な詳細があります。AppleACの値であることがわかりますが、最終的にはC => Appleのペアのみを保持します。これは、A => Appleが破棄されることを意味します。

3。なぜこれが起こっているのですか?

PHPでは、配列のキーは一意です。 array_flip()が値をキーに変えると、複数の値が同じ場合、「キー競合」が発生します。 PHPは、以前の値を後続の値で上書きし、データの損失につながります。

今の例を継続して、 array_flip()を実行するプロセスは次のとおりです。

  1. A => AppleApple => a

  2. b =>バナナバナナ=> b

  3. C => AppleApple => C以前のApple => aを上書き

したがって、 Apple => Cのみが最終結果に保持され、元のApple => Aが上書きされます。

4.データの損失を避ける方法は?

キー価値のスワップを配列に「スワップ」する必要があるが、データの損失を受け入れることができない場合は、次のソリューションを考慮することができます。

方法1:複製値を手動で処理します

値を配列のキーとして使用すると、値はすべての元のキーを保持して配列になります。

 $input = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'apple'
];

$result = [];

foreach ($input as $key => $value) {
    if (!isset($result[$value])) {
        $result[$value] = [];
    }
    $result[$value][] = $key;
}

print_r($result);

出力:

 Array
(
    [apple] => Array
        (
            [0] => a
            [1] => c
        )

    [banana] => Array
        (
            [0] => b
        )
)

これにより、データの損失を回避するだけでなく、どのキーが同じ値に対応するかを明確に確認できます。

5。実際のシーンで注意すべきこと

たとえば、構成テーブルを処理する場合、データベースフィールドをフロントエンドフィールドにマップします。

 $mapping = [
    'username' => 'user',
    'email' => 'user',
    'address' => 'location'
];

$flipped = array_flip($mapping);

print_r($flipped);

出力:

 Array
(
    [user] => email
    [location] => address
)

ユーザー=> usernameuser =>電子メールの両方が予約されていることを期待しているかもしれませんが、実際にはユーザー=>電子メールのみが残り、その他がカバーされています。この場合、論理エラーを回避するために、前述の「アレイに値」の練習を使用することをお勧めします。

6。概要

  • array_flip()はキーと値をペアリングします。

  • 元の配列に重複した値がある場合、「重要な競合」が発生します。

  • PHPのアレイキーは一意でなければならないため、後者のキーは前のものを上書きして、データの損失になります。

  • 値はキーに手動で変換でき、元のキーはすべての情報を保存するために配列に保存されます。