比较关联数组 - 返回不匹配的值
Posted
技术标签:
【中文标题】比较关联数组 - 返回不匹配的值【英文标题】:Compare Associative arrays - return unmatched values 【发布时间】:2014-09-11 14:42:11 【问题描述】:我有 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
)
【问题讨论】:
那么问题出在哪里?你有没有尝试过? 【参考方案1】:类似这样的:
$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
【讨论】:
如何更改它以将结果保存到新数组中而不是修改现有数组?【参考方案2】:试试这个...
$newArr = array();
foreach($arr1 as $k=>$v)
$dif = abs($arr1[$k] - $arr2[$k]);
if($dif) $newArr[$k] = $dif;
print '<pre>';
print_r($newArr);
【讨论】:
这行得通,但是我在$dif = abs($linequants[$k] - $costquants[$k]);
行得到一个未定义的索引错误
if(isset($linequants[$k], $costquants[$k])) $dif = abs($linequants[$k] - $costquants[$k]); if($dif) $newArr[$k] = $dif;
【参考方案3】:
这会做你想做的事:
array_intersect_key($array1, $array2)
【讨论】:
这里不测试值是否不同,也不减去两个数组中的值。 这只是返回第一个数组中存在于另一个数组中的值,而不是差异【参考方案4】:$diff = array_diff_assoc($arr1, $arr2);
$result = array();
foreach(array_keys($diff) as $key)
$result[$key] = abs($arr1[$key] - $arr2[$key]);
var_dump($result);
【讨论】:
以上是关于比较关联数组 - 返回不匹配的值的主要内容,如果未能解决你的问题,请参考以下文章