在PHP 中, array_flip()是一個非常實用的函數,它的作用是。也就是說,原本的數組中的值會變成新的鍵,原來的鍵會變成對應的值。
但你可能會發現,在使用array_flip()之後,數組的長度變少了。這是為什麼呢?是不是因為原來的值中有重複的?答案是:是的,正是因為值重複了!
$original = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple',
];
$flipped = array_flip($original);
print_r($flipped);
Array
(
[banana] => b
[apple] => c
)
可以看到,原本$original數組有三個元素,但$flipped數組只有兩個。為什麼'apple' => c覆蓋了'apple' => a呢?
array_flip()要求數組中的值必須是可作為鍵的類型,也就是字符串或整數。當你翻轉時,如果有兩個鍵對應相同的值,後者會覆蓋前者。
在上面的例子中:
'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只會保留一次映射(可能是'ghi789' ),前面'abc123'就被覆蓋了。這樣會對你的短鏈反查邏輯產生影響。
所以在實際應用中,如果你要反查短鏈,一定要判斷是否存在重複值,並選擇合適的數據結構。
array_flip()會將數組的鍵和值互換。
如果原數組中有重複的值,翻轉後只會保留最後一個,前面的會被覆蓋。
這種情況會導致數組長度變少。
如果你需要保留所有映射關係,可以手動構建數組,值對應為數組。
理解這個特性有助於你在編寫PHP 程序時避免數據丟失的問題。希望本文能幫你更清楚地認識array_flip()的行為!