2013-04-09 115 views
-1

我有下面的代码,并试图比较两个数组与array_diff但是我一直没有得到任何结果。我不确定它是否重要,但是阵列中有很多字段,我真的只想比较一个字段......这可能吗?我错过了什么?比较两个阵列与array_diff

<?php 
$json = file_get_contents("http://ebird.org/ws1.1/data/obs/region/recent?rtype=subnational1&r=US-AZ&back=7&fmt=json"); 
$json2 = file_get_contents("http://ebird.org/ws1.1/data/obs/region/recent?rtype=subnational1&r=US-NV&back=7&fmt=json"); 

$array1 = json_decode($json, TRUE); 
$array2 = json_decode($json2, TRUE); 

if ($array1 == $array2) { 
echo 'There are no differences'; 
}else 
var_dump(array_diff($array2, $array1)); 
echo 'they are different'; 

?> 
+0

你阅读的阵列和平等比较手动'array_diff'? – Jon 2013-04-09 17:32:39

+0

为什么不把JSON作为一个字符串进行比较。如果它们相等,那么数组/对象在解码时将会是相同的。 ['strcmp'](http://php.net/strcmp)。 – phpisuber01 2013-04-09 17:35:33

+0

你只比较一个字段是什么意思? $ arr1 ['field_x1'] === $ arr2 ['filed_x2']? – djot 2013-04-09 17:38:43

回答

3

您需要检查阵列针对对方:

$Array_1 = array (1,2,3,4,5); 
$Array_2 = array(1,2,3,4,5,6); 

print_r(array_diff($Array_1,$Array_2)); 

将输出:

Array 
(
) 

鉴于:

print_r(array_diff($Array_2,$Array_1)); 

将输出:

Array 
(
    [5] => 6 
) 

所以这可能是一个解决办法:

function ArrayDiff ($Array_1, $Array_2){ 
    $Compare_1_To_2 = array_diff($Array_1,$Array_2); 
    $Compare_2_To_1 = array_diff($Array_2,$Array_1); 
    $Difference_Array = array_merge($Compare_1_To_2,$Compare_2_To_1); 
    return $Difference_Array; 

} 

print_r(ArrayDiff($Array_1,$Array_2)); 

将输出:

Array 
(
    [0] => 6 
) 

把这个变成一个if语句:

$Differences = ArrayDiff($Array_2,$Array_1); 
if (count($Differences) > 0){ 
    echo 'There Are Differences Between The Array:'; 
    foreach ($Differences AS $Different){ 
     echo "<br>".$Different; 
    } 

所有的例子并且代码基于o FF在启动($ Array_1和$ Array_2)阵列

0
$po_line_array=array(); 
    $po_line_clone_array=array(); 

    foreach($cart->line_items as $line_no => $po_line) 
     $po_line_array[$line_no]=$po_line->labdip_details_id; 
     print_r($po_line_array,1); 
    foreach($cart->line_items_clone as $line_no_clone => $po_line_clone) 
     $po_line_clone_array[$line_no_clone]=$po_line_clone->labdip_details_id; 
     print_r($po_line_clone_array,1); 

    $result=array_diff($po_line_clone_array,$po_line_array); 
    print_r($result,1); 

输出:

Array ([0] => 101) 

    Array ([0] => 101 [1] => 103) 

    Array ([1] => 103) 
+0

“你的答案肯定值得一点解释。请参阅http://stackoverflow.com/help/how-to-answer 。评论将有助于创建可搜索的内容。 “ – 2017-03-29 06:24:12