2011-02-01 18 views
0

我有2個數組。 array1和array2是相同的,除了array2的子陣列沒有鍵'key3'並且子陣列的順序不匹配。PHP陣列密鑰對值轉移的複雜性問題

$array1=array(
    0=>array(
     'type'=>'1' 
     'id'=>'1' 
     'key3'=>'abc' 
     ) 
    1=>array(
     'type'=>'1' 
     'id'=>'2' 
     'key3'=>'def' 
     ) 
    3=>array(
     'type'=>'2' 
     'id'=>'1' 
     'key3'=>'ghi' 
     ) 
    ... 
) 
$array2=array(
    0=>array(
     'type'=>'1' 
     'id'=>'1' 
     ) 
    1=>array(
     'type'=>'2' 
     'id'=>'1' 
     ) 
    ... 
) 

該任務只是簡單地把key3和它的值放到array2對應的子數組中。

我只能想到幾個層次的foreach循環來實現的任務,這將是非常昂貴的

是否有可以執行的任務更簡單更快什麼方法呢?

+0

在當前情況下效率是一個明顯的問題嗎?還是你只是假設你的實施效率低下? – 2011-02-01 13:37:49

回答

2
// build a hash table of id/type => key3 for fast access 
$index = array(); 
foreach ($array1 as $data) { 
    $index[$data['id'].'/'.$data['type']] = $data['key3']; 
} 

// use that hash table 
foreach ($array2 as &$data) { 
    $data['key3'] = $index[$data['id'].'/'.$data['type']]; 
} 
// never forget to unset the variable if iterating by reference 
unset($data); 

爲什麼這是快:你只有兩個與N次迭代,其中N界定的元素個數循環,所以這是複雜O(N)的。哈希訪問被認爲是O(1)。所以整個複雜性是線性的。嵌套循環迭代將是O(N^2)