PHPプログラミングでは、 array_flip()は、配列のキーと値をペアリングできる一般的に使用される関数です。ただし、多くの開発者は、使用中に「データ損失」の問題に遭遇する可能性があります。特に、配列に重複した値がある場合。それで、何が起こっているのですか?この記事では、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
)
キーと値が問題なく正常に往復したことがわかります。
元の配列に値が重複している場合、array_flip()はどうなりますか?
例を見てみましょう:
$input = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple'
];
$result = array_flip($input);
print_r($result);
出力:
Array
(
[banana] => b
[apple] => c
)
ここには重要な詳細があります。AppleはAとCの値であることがわかりますが、最終的にはC => Appleのペアのみを保持します。これは、A => Appleが破棄されることを意味します。
PHPでは、配列のキーは一意です。 array_flip()が値をキーに変えると、複数の値が同じ場合、「キー競合」が発生します。 PHPは、以前の値を後続の値で上書きし、データの損失につながります。
今の例を継続して、 array_flip()を実行するプロセスは次のとおりです。
A => Apple → Apple => a
b =>バナナ→バナナ=> b
C => Apple → Apple => C (以前のApple => aを上書き)
したがって、 Apple => Cのみが最終結果に保持され、元のApple => Aが上書きされます。
キー価値のスワップを配列に「スワップ」する必要があるが、データの損失を受け入れることができない場合は、次のソリューションを考慮することができます。
値を配列のキーとして使用すると、値はすべての元のキーを保持して配列になります。
$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
)
)
これにより、データの損失を回避するだけでなく、どのキーが同じ値に対応するかを明確に確認できます。
たとえば、構成テーブルを処理する場合、データベースフィールドをフロントエンドフィールドにマップします。
$mapping = [
'username' => 'user',
'email' => 'user',
'address' => 'location'
];
$flipped = array_flip($mapping);
print_r($flipped);
出力:
Array
(
[user] => email
[location] => address
)
ユーザー=> usernameとuser =>電子メールの両方が予約されていることを期待しているかもしれませんが、実際にはユーザー=>電子メールのみが残り、その他がカバーされています。この場合、論理エラーを回避するために、前述の「アレイに値」の練習を使用することをお勧めします。
array_flip()はキーと値をペアリングします。
元の配列に重複した値がある場合、「重要な競合」が発生します。
PHPのアレイキーは一意でなければならないため、後者のキーは前のものを上書きして、データの損失になります。
値はキーに手動で変換でき、元のキーはすべての情報を保存するために配列に保存されます。