2014-09-11 3 views
0

У меня есть 2 ассоциативных массива, как показано ниже.Сравнить Ассоциативные массивы - вернуть непревзойденные значения

Array 
(
    [Turbine] => 0 
    [Nuts and Bolts] => 6 
    [Runner Blade] => 5 
) 
Array 
(
    [Nuts and Bolts] => 10 
    [Runner Blade] => 5 
    [Turbine] => 1 
) 

Что я хочу сделать, это сравнить два массива и возвратные, имеющие один и тот же ключ, но другое значение. Подобно array_intersect_assoc, но возвращает все значения, которые соответствуют тому, что я не хочу. Используя примеры выше, что я хочу, чтобы вернуться разница между 2 значениями, что-то вроде:

Array 
(
    [Nuts and Bolts] => 4 
    [Turbine] => 1 
) 
+0

Так в чем проблема? Вы что-то пробовали? –

ответ

1

Попробуйте это ...

$newArr = array(); 
foreach($arr1 as $k=>$v){ 
    $dif = abs($arr1[$k] - $arr2[$k]); 
    if($dif) $newArr[$k] = $dif; 
} 
print '<pre>'; 
print_r($newArr); 
+0

Это работает, однако я получаю неопределенную ошибку индекса в строке '$ dif = abs ($ linequants [$ k] - $ costquants [$ k]);' – Harry12345

+0

'if (isset ($ linequants [$ k], $ costquants [$ k])) { $ dif = abs ($ linequants [$ k] - $ costquants [$ k]); if ($ dif) $ newArr [$ k] = $ dif; } ' – MH2K9

+0

Приветствия, которые избавляются от ошибки – Harry12345

0

Это будет делать то, что вы хотите:

array_intersect_key($array1, $array2) 
+0

Это не проверяет, отличаются ли значения, и не вычитает значения в двух массивах. – Barmar

+0

Это просто возвращает значения из первого массива, которые присутствуют в другом массиве, а не в разности – Harry12345

2

Что-то вроде этого:

$ar1; 
$ar2; 

foreach ($ar1 as $k => $v) { 
    if (intval($ar2[$k]) != intval($v)) 
     $ar1[$k] = abs($v - $ar2[$k]); 
    else 
     unset($ar1[$k]); // remove key with equal value 
} 
+0

. Как я могу изменить его, чтобы сохранить результаты в новый массив вместо изменения существующего? – Harry12345

0
$diff = array_diff_assoc($arr1, $arr2); 

$result = array(); 

foreach(array_keys($diff) as $key){ 
    $result[$key] = abs($arr1[$key] - $arr2[$key]); 
} 

var_dump($result); 
Смежные вопросы