2014-03-24 44 views
0

這是從另一個問題的延續,我忘了問完整的問題。我做的運氣是因爲我要問錯誤的問題。好吧,我有以下兩個數組array_diff在assoc array上只顯示第一個結果而不是全部

Array ([idAsset] => 10000005 [AssetName] => HP) 
Array ([idAsset] => 10000006 [AssetName] => HP Server) 
Array ([idAsset] => 10000009 [AssetName] => HP Laptop) 
Array ([idAsset] => 10000010 [AssetName] => Office Printer) 
Array ([idAsset] => 10000023 [AssetName] => test) 




Array ([idAsset] => 10000023 [AssetName] => test) 

我這些使用下面的代碼

$firstArray = array(); 
    $secondArray = array(); 
    do{ 
    array_push($firstArray,$array1); 
    }while($array1 = mysql_fetch_assoc($AssetUp)); 


do{ 
array_push($secondArray ,$array2); 
}while($array2 = mysql_fetch_assoc($DocUp)); 

$array3 = array_diff_key($firstArray, $secondArray); 
print_r($array3); 

然而,這給我留下了以下內容:

Array ( 
    [2] => Array ([idAsset] => 10000006 [AssetName] => HP Server) 
    [3] => Array ([idAsset] => 10000009 [AssetName] => HP Laptop) 
    [4] => Array ([idAsset] => 10000010 [AssetName] => Office Printer) 
    [5] => Array ([idAsset] => 10000023 [AssetName] => test)) 

這似乎是離開了第一個循環,還包括測試資產

我想留下一個數組,不包括在兩個陣列中找到的項目。例如,從上面的10000023測試將從兩個數組中刪除,留給我$ firstArray中的前4行(這就是爲什麼第一個問題會出錯的原因)我只需要差異而不是相似之處。

+0

是和array_diff_assoc不多維。 – ToBe

+0

如果您將兩個數組都更改爲使用'idAsset'作爲其第一級密鑰,那麼您可以根據該密鑰進行區分。 – ToBe

+0

嗨@Tobe謝謝你的回答。你能否解釋一下,因爲我不認爲我理解你的意思。目前,我從這兩個查詢中要求的第一件事是idAsset –

回答

0

我假設,你的陣列如下:

$data = array(array("idAsset" => 10000005, "AssetName" => "HP"), 
       array("idAsset" => 10000006, "AssetName" => "HP Server"), 
       ...); 
和array_diff_assoc

不會檢查任何子陣列。所以在你的情況下,它只會比較你不需要的數字指標。

一個好主意,可能是也使用idAsset要比較的數組鍵:

$data = array("10000005" => array("idAsset" => 10000005, "AssetName" => "HP"), 
       "10000006" => array("idAsset" => 10000006, "AssetName" => "HP Server"), 
       ...); 

如果你現在他們通過array_diff_key比較,它會在關鍵只返回任何差分。而且,由於這是你的標準......瞧

http://de2.php.net/manual/de/function.array-diff-key.php

相關問題