array_flip() 將陣列的鍵與值互換,是建立反向查找表、去除重複值(保留最後出現)、字串/整數值轉鍵名的高效工具。本文詳細說明型別限制、重複值處理、錯誤情境與最佳實踐。
array_flip(array $array): array
| 參數 | 必要性 | 說明 |
|---|---|---|
$array | 必填 | 輸入陣列,值必須為 字串或整數,否則拋出 TypeError (PHP 8.0+) / Warning (舊版)。 |
string、int(含 bool 會轉為 0/1),float、null、array、object 觸發錯誤。<?php
$a = [0 => 'Dog', 1 => 'Cat', 2 => 'Horse'];
$flipped = array_flip($a);
print_r($flipped);
// 輸出:
// Array (
// [Dog] => 0
// [Cat] => 1
// [Horse] => 2
// )
?>
<?php
$b = ['a' => 'x', 'b' => 'y', 'c' => 'x', 'd' => 'z'];
$flipped = array_flip($b);
print_r($flipped);
// 輸出:
// Array (
// [x] => c // 保留最後出現的 'c'
// [y] => b
// [z] => d
// )
// 應用:快速去重並保留最後索引
?>
<?php
$c = [10 => 100, 20 => 200, 30 => true, 40 => false];
$flipped = array_flip($c);
print_r($flipped);
// 輸出:
// Array (
// [100] => 10
// [200] => 20
// [1] => 30 // true → 1
// [0] => 40 // false → 0
// )
?>
<?php
$d = ['price' => 19.99];
// PHP 8.0+ 拋出 TypeError: array_flip(): Argument #1 ($array) contains non-string/int key/value
// PHP 7.x 發出 Warning 並回傳 NULL
?>
| 場景 | 代碼模式 | 說明 |
|---|---|---|
| 建立反向查找表 | $map = array_flip($options); | 將 ['id'=>1,'name'=>'title'] 轉為 [1=>'id','title'=>'name'],O(1) 查找鍵名 |
| 去除重複值保留最後 | $unique = array_flip(array_flip($arr)); | 雙重翻轉利用「保留最後」特性去重,保留原鍵名順序 |
| 驗證合法值白名單 | if (isset($whitelist[$input])) | 將白名單值翻轉為鍵,isset 判斷極快 |
| 字串統計字元頻率 | array_flip(array_count_values(str_split($str))) | 快速建立字元→頻率對照(頻率≤255時) |
array_unique() 保留第一次出現,語意不同;需保留最後用雙重 flip。serialize() 或 json_encode() 後再 flip,但失去原始型別。善用 array_flip() 的「值轉鍵、保留最後」特性,能以極簡代碼解決反向查找、去重、白名單驗證等高頻問題。