2011-11-17 76 views
2

我似乎可以解決這個問題。 我有客人的兩份名單/國家,來自SQL減去PHP數組

我們,美國,英國,FR,英國,英國,英國

美國,英國

我使用array_count_values()製作了陣列:

現在10
Array ([us] => 2 [uk] => 4 [fr] => 1) 
Array ([us] => 1 [uk] => 1) 

,我想獲得第一負第二

Array ([us] => 1 [uk] => 3 [fr] => 1) 

這可能嗎?

+2

不敢相信有多少用戶不仔細閱讀問題... – scube

回答

8
foreach($arr1 as $key => &$val){ 
    if(isset($arr2[$key])){ 
     $val -= $arr2[$key]; 
    } 
} 
+1

請使用描述性的變量名稱,以便您的代碼更容易理解。 – Bluewind

+2

'$ arr'和'$ val'足夠描述。這個循環可以很容易地插入一個函數,該函數將兩個數組作爲參數並且不想描述它們的上下文。 – AlienWebguy

-2
<?php 
$array1 = array(1,2,3,4,5,6,a,b,c,d); 
$array2 = array(a,b,c,d); 
$result = array_diff($array1, $array2); 
print_r($result); 
?> 
+0

和array_diff_assoc使用替代 – Flukey

+0

這是怎麼回事減去值相同的鍵? – matino

+3

-1因爲它沒有做,他需要...而且也沒有和array_diff_assoc可能 – scube

3

試試這個:

foreach($bigArray as $country => $count) 
{ 
    if(isset($smallArray[$country])) 
    { 
    $bigArray[$country] -= $smallArray[$country]; 
    } 
} 
+0

請解釋downvotes ... – scube

-3

這有助於

 
$result = array_intersect($array1, $array2); 
+1

他要爲subtrackt相同的鍵的值,這是不會幫他 – matino

+0

是啊,我的錯誤 –

0

如果有第二陣列中不在第一值這將工作:

$array1 = array("us" => 2, "uk" => 4, "fr" => 1); 
$array2 = array("us" => 1, "uk" => 1, "ca" => 1); 

$keys = array_keys(array_merge($array1, $array2)); 
foreach ($keys as $key) { 
    $result[$key] = (isset($array1[$key]) ? $array1[$key] : 0) - (isset($array2[$key]) ? $array2[$key] : 0); 
} 

結果:

 
Array 
(
    [us] => 1 
    [uk] => 3 
    [fr] => 1 
    [ca] => -1 
)