2011-11-17 91 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 
)