2013-02-05 31 views
1

我有兩個我正在比較的數組。比較完美的工作如下:只顯示我的第二個數組中的值php

$tmp = array_diff_key($arr1, $arr2); 
    $echo $tmp; 

不過,我只是想顯示存在於陣列2中不存在數組中的值1

編輯:好了,所以感謝大家的幫助。我怎麼仍然無法使它工作。

我現在用

$tmp = array_diff($arr2, $arr1); 
    var_dump($tmp); 

打印出以下幾點:

array(1) { [0]=> array(3) { [0]=> string(4) "cars" [1]=> string(4) "vans" [2]=> string(6) "people" } } 

所以,我會解釋一下。

數組1有汽車,貨車(這是從數據庫中拉出來的)。

數組2有汽車,人(這是從表單中輸入的)。

我想只顯示值不在數據庫中,所以我想$ TMP將回聲只是人民的汽車是在數據庫和貨車是$ ARR1

我希望這就是清楚的,即使困惑我寫它;)

如果我個人的var_dump兩個陣列我得到

array(3) { [0]=> NULL [1]=> string(4) "cars" [2]=> string(4) "vans" } array(1) { [0]=> array(2) { [0]=> string(6) "people" [1]=> string(5) "tanks" } } 
+0

這與你的代碼有什麼不同? –

+0

請不要使用不適用於您的問題的標籤 –

+0

'$ echo'應該是'echo',並且不會打印數組的內容。 – leftclickben

回答

2
$tmp = array_diff_key($arr2, $arr1); 
$echo $tmp; 

echo $tmp將只輸出'Array'我個墨水,因此您可能必須循環(可能與foreach)以顯示每個單獨的值,或使用var_dump

array_diff_key也適用於鍵值,array_diff值(你在你的問題中提到「值」)。

+0

哈哈哈您的權利 – atpatil11

+0

確定清除我的緩存後,它會出現這個答案很好。非常感謝你:) –

1

你可以做如下:

foreach($tmp as $key=>$value) { 
    if(isset($arr2[$key])) { 
     echo $arr2[$key]; 
    } 
} 
2

使用array_intersectarray_intersect給出了在兩者中的值。

$tmp2 = array_intersect($arr1, $arr2); 
var_dump($tmp2); 

編輯:錯誤的問題。 array_diff將用於此目的。 array_diff返回參數1中的值,這些參數在其餘參數中不存在。

$tmp2 = array_diff($arr2, $arr1); 
var_dump($tmp2); 

編輯:在你的情況下,你的$arr2在其內部具有一個陣列,其具有的值。所以,你需要array_diff($arr2[0], $arr1);

這裏的工作fiddle

+0

我已經改變到array_diff,但它仍然無法正常工作。我的主要問題已經更新了您的代碼和var_dump的輸出 –

+0

您可以請將單個陣列的'var_dump'添加到問題中嗎? – Achrome

+0

完成array1和array2彼此相鄰。這次在陣列2我進入坦克,人們 –

1

從我的array_diff_key理解,該函數返回一個包含所有從參數1鍵不存在於任何其它陣列的條目的陣列。因此,只需將$arr2納入第一個參數。

所以,你的代碼應該是:

$tmp = array_diff_key($arr2, $arr1); 
$echo $tmp; 

Source

+0

謝謝@MikeB我已經嘗試array_diff_key這種方式,它只是給我與數組(0){}事件,但我知道它應該說人作爲汽車是在陣列1 –

1

交換的方向:

$tmp = array_diff_key($arr2, $arr1); 
    $echo $tmp; 
1

如果你所關心的值,而不是鍵值,那麼你應該只使用array_diff() 。您還需要在參數中顛倒數組的順序。最後回顯一個數組並不會告訴你想要什麼,請使用var_dump()。所以把它放在一起:

$tmp = array_diff($arr2, $arr1); 
var_dump($tmp); 
+0

謝謝你你的幫助,但只是打印數組(0){}我現在已經更新了我的問題 –

相關問題