php 更改陣列鍵名,同時不改變原陣列的排列順序
先感嘆一下,陣列函式真的是個好東西,它已經不止一次兩次幫助我解決問題了,先上此功能中需要掌握的幾個陣列函式。
array_keys(array,value,strict);
array_keys() 函式返回包含陣列中所有鍵名的一個新陣列。
如果提供了第二個引數,則只返回鍵值為該值的鍵名。
如果 strict 引數指定為 true,則 PHP 會使用全等比較 (===) 來嚴格檢查鍵值的資料型別。
array_slice(array,start,length,preserve)
引數 | 描述 |
---|---|
array | 必需。規定陣列。 |
start |
必需。數值。規定取出元素的開始位置。 0 = 第一個元素。 如果該值設定為正數,則從前往後開始取。 如果該值設定為負數,則從後向前取 start 絕對值。 -2 意味著從陣列的倒數第二個元素開始。 |
length |
可選。數值。規定被返回陣列的長度。 如果該值設定為整數,則返回該數量的元素。 如果該值設定為負數,則函式將在舉例陣列末端這麼遠的地方終止取出。 如果該值未設定,則返回從 start 引數設定的位置開始直到陣列末端的所有元素。 |
preserve |
可選。規定函式是保留鍵名還是重置鍵名。可能的值:
|
array_combine(keys,values);
array_combine() 函式通過合併兩個陣列來建立一個新陣列,其中的一個數組是鍵名,另一個數組的值為鍵值。
註釋:鍵名陣列和鍵值陣列的元素個數必須相同!
如果其中一個數組為空,或者兩個陣列的元素個數不同,則該函式返回 false。
下來照舊上程式碼示例:
$gameTypeTag 資料內容大致如下:
array(8) { ["遊戲"]=> array(40) { [0]=> string(9) "庇護所" [1]=> string(12) "星際狂飆" [2]=> string(13) "永不言棄1" } ["管理"]=> array(3) { [0]=> string(12) "週五團建" [1]=> string(6) "請假" [2]=> string(6) "扣罰" } ["功能"]=> array(9) { [0]=> string(12) "產品後臺" [1]=> string(15) "技術懇談會" [2]=> string(12) "發行計劃" [3]=> string(12) "專案分配" [4]=> string(6) "互推" [5]=> string(8) "sourcing" [6]=> string(9) "策劃案" [7]=> string(9) "新營銷" [8]=> string(18) "安卓評分系統" } ["部門"]=> array(11) { [0]=> string(2) "QA" [1]=> string(6) "版號" [2]=> string(6) "運營" } ["個人"]=> array(0) { } ["其他"]=> array(3) { [0]=> string(11) "Gamer-Gamer" [1]=> string(6) "官網" [2]=> string(5) "Steam" } ["會展"]=> array(0) { } ["測試"]=> array(0) { } }
將上述陣列中的會展改為AUTO:
$old_key = '會展';
$new_key = 'AUTO';
$key_array = array_keys($gameTypeTag);
foreach ($key_array as $key => $value) {
if($value == $old_key){
$key_array[$key] = $new_key;
}
}
$gameTypeTag = array_combine($key_array,array_slice($gameTypeTag, 0));
講真,程式碼不復雜,想清楚怎麼做就好。
同時,附上另外一種改鍵名需求下的程式碼連結:
這個需求下,還需要掌握:
array_walk(array,myfunction,userdata...)
array_walk() 函式對陣列中的每個元素應用回撥函式。如果成功則返回 TRUE,否則返回 FALSE。
典型情況下 myfunction 接受兩個引數。array 引數的值作為第一個,鍵名作為第二個。如果提供了可選引數 userdata ,將被作為第三個引數傳遞給回撥函式。
如果 myfunction 函式需要的引數比給出的多,則每次 array_walk() 呼叫 myfunction 時都會產生一個 E_WARNING 級的錯誤。這些警告可以通過在 array_walk() 呼叫前加上 PHP 的錯誤操作符 @ 來抑制,或者用 error_reporting()。
註釋:如果回撥函式需要直接作用於陣列中的值,可以將回調函式的第一個引數指定為引用:&$value。(參見例子 3)
註釋:將鍵名和 userdata 傳遞到 myfunction 中是 PHP 4.0 新增加的。