1. 程式人生 > >php 更改陣列鍵名,同時不改變原陣列的排列順序

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

可選。規定函式是保留鍵名還是重置鍵名。可能的值:

  • true - 保留鍵名
  • false - 預設。重置鍵名
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 新增加的。