2013-04-09 111 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