2011-04-18 23 views
3

是否有任何類型的函數或快速過程用於比較PHP中的兩個數組,如果一個數組的值存在第二陣列中的關鍵,第二陣列保持其鍵的值,否則該鍵的值被設置爲0。如果PHP數組的值不存在作爲另一個數組中的值,則將PHP數組的值設置爲0

例如,

$first_array = array('fred', 'george', 'susie'); 

$second_array = array(
       'fred' => '21', 
       'george' => '13',  
       'mandy' => '31',  
       'susie' => '11' 
    ); 

兩相比較後,最好我最後的陣列將是:

Fred > 21 
George > 13 
Mandy > 0 
Susie > 11 

Mandy被設置爲0,因爲密鑰不存在作爲第一個數組中的值...... ..

我知道這可能是一種奇怪的事情想要做!但任何幫助都會很棒。

+0

可以用array_walk()或array_map()或的foreach(完成),如下 – 2011-04-18 03:28:20

+0

有趣,感謝袞。我會看看這些功能。 – coopertrooper 2011-04-18 03:43:41

回答

3
foreach ($second_array as $key=>$val) { 
    if (!in_array($key, $first_array))) { 
     $second_array[$key] = 0; 
    } 
} 

雖然你可能想建立所述第一陣列爲一組,以使整體的運行時將是O(N),而不是O(N^2)。

+0

完美,謝謝! – coopertrooper 2011-04-18 03:42:27

2
foreach($second_array as $name => $age) { 
    if(in_array($name, $first_array) { 
     //whatever 
    } 
    else { 
     //set the value to zero 
    } 
} 
+0

感謝您的幫助,本傑..偉大的作品。 – coopertrooper 2011-04-18 03:45:44

1
// get all keys of the second array that is not the value of the first array 
$non_matches = array_diff(array_keys($second_array), $first_array); 

// foreach of those keys, set their associated values to zero in the second array 
foreach ($non_$matches as $match) { 
    $second_array[$match] = 0; 
} 
0

foreach是更具可讀性,但你也可以使用array functions

array_merge($second_array, 
      array_fill_keys(array_diff(array_keys($second_array), 
             $first_array), 
          0));       
# or 
array_merge(
    array_fill_keys(array_keys($second_array), 0), 
    array_intersect_key($second_array, array_flip($first_array))); 
# or 
function zero() {return 0;} 

array_merge(
    array_map('zero', $second_array), 
    array_intersect_key($second_array, array_flip($first_array))); 
相關問題