PHPでは、 array_flip()は非常に実用的な関数であり、その機能は配列を入れることです。つまり、元の値は新しいキーになり、元のキーは新しい値になります。
しかし、問題は、元の配列に重複した値がある場合はどうなりますか? array_flip()はどのように処理されますか?前の値は上書きされますか?この記事では、この問題を詳細に分析します。
基本的な例を見てみましょう。
$input = [
'a' => 1,
'b' => 2,
'c' => 3
];
$flipped = array_flip($input);
print_r($flipped);
出力結果:
Array
(
[1] => a
[2] => b
[3] => c
)
値は一意であり、キーとして安全に使用できるため、これは問題ありません。
別の例を見てみましょう。今回は重複した値を使用してください。
$input = [
'first' => 'apple',
'second' => 'banana',
'third' => 'apple'
];
$flipped = array_flip($input);
print_r($flipped);
出力結果:
Array
(
[banana] => second
[apple] => third
)
ご覧のとおり、キー「First」=> 'Apple'は、フリップ後に「3番目」=> 'Apple'によって上書きされます。つまり、 array_flip()は最後のキーの値を最終キーとして使用し、以前の同じ価値項目は無視されます(オーバーライド)。
これは、データの偶発的な損失を避けるためにビッグデータを処理する場合、特に注意する必要があります。
各タグIDがタグ名に対応しているタグシステムを開発しているとします。
$tags = [
1 => 'php',
2 => 'javascript',
3 => 'php'
];
$flipped = array_flip($tags);
IDをタグ名でバックチェックすることをお勧めしますが、現時点では「PHP」は1つのID( 3 )のみを保持し、ID 1は上書きされます。この状況を安全に処理するには、手動トラバーサルなど、他の方法を使用する必要がある場合があります。
$reverse = [];
foreach ($tags as $id => $name) {
$reverse[$name][] = $id;
}
これにより、すべてのIDを保持でき、多面的な関係になります。
PHPの配列のキーは整数または文字列である必要があるため、値が配列、オブジェクト、またはnullなどである場合、キーとして使用できない場合、 array_flip()は警告を投げます。
$input = [
'a' => null,
'b' => ['nested']
];
$flipped = array_flip($input); // エラーが報告されます
array_flip()は、値をキーとして、キーは値として受け取ります。
重複した値に遭遇すると、前面は背面に上書きされます。
データの損失を回避するには、グループ化などのより柔軟な処理方法の使用を検討してください。
値は、キーとして使用できるタイプでなければならないことに注意してください。