首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP array_flip() 函式詳解:鍵值互換的規則、陷阱與實戰應用

     編輯:PHP 相關知識

array_flip() 將陣列的鍵與值互換,是建立反向查找表、去除重複值(保留最後出現)、字串/整數值轉鍵名的高效工具。本文詳細說明型別限制、重複值處理、錯誤情境與最佳實踐。

語法與參數

array_flip(array $array): array
參數必要性說明
$array必填輸入陣列,值必須為 字串或整數,否則拋出 TypeError (PHP 8.0+) / Warning (舊版)。

核心轉換規則

  1. 鍵值互換:新鍵 = 舊值,新值 = 舊鍵。
  2. 重複值處理:遇到相同值,**保留最後出現的鍵名**,先前者被覆蓋丟失。
  3. 型別限制:僅支援 string、int(含 bool 會轉為 0/1),float、null、array、object 觸發錯誤。
  4. 索引重建:若原鍵為數值索引,翻轉後可能成為稀疏陣列。

實戰範例與輸出解析

範例 1:基本字串值翻轉

<?php
$a = [0 => 'Dog', 1 => 'Cat', 2 => 'Horse'];
$flipped = array_flip($a);
print_r($flipped);
// 輸出:
// Array (
//     [Dog] => 0
//     [Cat] => 1
//     [Horse] => 2
// )
?>

範例 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
// )
// 應用:快速去重並保留最後索引
?>

範例 3:整數值與布林值轉換

<?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
// )
?>

範例 4:錯誤情境 - 浮點數值

<?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時)

效能與替代方案

  • 時間複雜度:O(n),單次遍歷,極快。
  • 記憶體:建立新陣列,原陣列釋放前雙倍佔用。
  • 大陣列去重:array_unique() 保留第一次出現,語意不同;需保留最後用雙重 flip。
  • 非標量值:序列化為字串 serialize() 或 json_encode() 後再 flip,但失去原始型別。

常見誤區檢查清單

  • ❌ 假設保留第一次出現 → 實際保留最後一次。
  • ❌ 傳入含浮點數/物件的陣列 → 直接報錯/回傳 null。
  • ❌ 期望保留原數值索引順序 → 翻轉後索引由值決定,順序重組。

善用 array_flip() 的「值轉鍵、保留最後」特性,能以極簡代碼解決反向查找、去重、白名單驗證等高頻問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved