2009-11-17 20 views
1

我有兩個數組:使用另一個數組的值更改數組的鍵的最佳方法是什麼?

array (
'AK_AGE_ASS_VISIBLE' => '1', 
'AK_AGE_ASS_COMP' => '0', 
    ..... 
) 

我想改變的關鍵,另一個值從另一個陣列服用:

array(
'AK_AGE_ASS_VISIBLE' => 'AGENT_ASSOCIATED', 
'AK_AGE_ASS_COMP' => 'AGENT_ASSOCIATED_O', 
.... 
) 

結束數組應該產生此陣:

array(
'AGENT_ASSOCIATED' => '1', 
'AGENT_ASSOCIATED_O' => '0', 
... 
) 

做這些事情的正確方法是什麼?請注意,arrayys將不具有相同數量的條目,並且不保證第一個陣列在另一個陣列中將具有相應的鍵。

非常感謝您

回答

4

試試這個:

$values = array(
    'AK_AGE_ASS_VISIBLE' => '1', 
    'AK_AGE_ASS_COMP' => '0', 
    // … 
); 
$keymap = array(
    'AK_AGE_ASS_VISIBLE' => 'AGENT_ASSOCIATED', 
    'AK_AGE_ASS_COMP' => 'AGENT_ASSOCIATED_O', 
    // … 
); 

$output = array(); 
foreach ($values as $key => $val) { 
    $output[$keymap[$key]] = $val; 
} 
+0

這扼殺了所有丟失的鑰匙,如果它不具有$鍵盤佈局的對應關係。這是我的解決方案: if($ keymap [$ key]){ \t \t \t \t $ output [$ keymap [$ key]] = $ val; \t \t \t}否則{ \t \t \t \t $輸出[$關鍵] = $ VAL; \t \t \t} – 0plus1 2009-11-17 11:43:05

+0

@ 0plus1:使用'isset'作爲變量存在測試:'if(isset($ keymap [$ key]))'。 – Gumbo 2009-11-17 16:43:28

2

使用內置array_combine()http://www.php.net/manual/en/function.array-combine.php

您可能需要使用array_intersect_key()來過濾那些陣列中不存在的密鑰。 http://www.php.net/manual/en/function.array-intersect-key.php

這裏是一個神奇的一行:

$output = array_combine(
    array_intersect_key($array_with_keys, $array_with_values), 
    array_intersect_key($array_with_values, $array_with_keys)); 
+0

雖然是正確的,但它有效地殺死了$ array_with_keys中沒有對應鍵的$ array_with_values。無論如何謝謝你,你讓我學到了新的東西! – 0plus1 2009-11-17 11:42:09

+1

你沒有提到我們應該如何處理任何一箇中不存在的密鑰,所以我認爲我們應該忽略它們。 – Lukman 2009-11-17 11:47:09

+0

無論如何,我可以很容易地修改一行,以滿足您的要求**如果**你已經在問題中明確表達......但是無論如何。 – Lukman 2009-11-17 11:47:52

相關問題