PHPでは、 array_flip()は非常に実用的な関数であり、その機能です。言い換えれば、元の配列の値は新しいキーになり、元のキーが対応する値になります。
ただし、 array_flip()を使用した後、配列の長さが小さくなることがわかります。なぜこれがなぜですか?元の値に重複があるからでしょうか?答えは次のとおりです。はい、それはまさに値が繰り返されているからです!
$original = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple',
];
$flipped = array_flip($original);
print_r($flipped);
Array
(
[banana] => b
[apple] => c
)
ご覧のとおり、 $のオリジナルアレイには元々3つの要素がありましたが、 $ Flipped配列には2つしかありませんでした。なぜ「Apple」=> cが「Apple」=> A上書きするのですか?
array_flip()では、配列内の値は、キー、つまり文字列または整数として使用できるタイプである必要があります。ひっくり返すと、同じ値に対応する2つのキーがある場合、後者は前者を無効にします。
上記の例:
'A' => 'Apple' → 'Apple' => a
'c' => 'apple' → 'apple' => c (元の「Apple」=> a )
したがって、 「Apple」=> Cのみがフリップされた配列に保持され、配列の長さが減少します。
すべてのマッピング関係を保存する必要がある場合は、値のマッピングをアレイに検討し、手動で処理できます。
$original = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple',
];
$flipped = [];
foreach ($original as $key => $value) {
if (!isset($flipped[$value])) {
$flipped[$value] = [];
}
$flipped[$value][] = $key;
}
print_r($flipped);
Array
(
[apple] => Array
(
[0] => a
[1] => c
)
[banana] => Array
(
[0] => b
)
)
これにより、すべての重要な情報を保持し、上書きの問題を回避できます。
URLショートリンクサービス( https://m66.net/abc123など)を行っているとしたら、元のリンクとその短いコードがある場合があります。
$links = [
'abc123' => 'https://m66.net/page1',
'def456' => 'https://m66.net/page2',
'ghi789' => 'https://m66.net/page1',
];
$reverse = array_flip($links);
print_r($reverse);
その結果、 https://m66.net/page1はマッピングを1回だけ(おそらく「GHI789」 )保持し、以前の「ABC123」が上書きされます。これは、ショートチェーンのカウンターチェックロジックに影響を与えます。
したがって、実際のアプリケーションでは、短いリンクを逆に確認する場合は、複製値があるかどうかを判断し、適切なデータ構造を選択する必要があります。
array_flip()は、配列のキーと値を交換します。
元の配列に重複した値がある場合、最後の配列のみがフリップ後に保持され、前の値のみが上書きされます。
この状況により、配列が小さくなります。
すべてのマッピング関係を維持する必要がある場合は、アレイに対応する値を使用して、手動で配列を構築できます。
この機能を理解することで、PHPプログラムを作成する際のデータ損失を回避できます。この記事が、 array_flip()の動作をより明確に理解するのに役立つことを願っています!