2012-07-19 58 views
0

可能有人請看看,讓我知道我做錯了什麼...... 什麼我試圖acheive是,在數據庫中,我有:PHP和array_diff不給結果

AGENT_REF = 1 
AGENT_REF = 2 
AGENT_REF = 3 
AGENT_REF = 4 
AGENT_REF = 5 

在上傳的文件解析信息

$blmarArray = array($agentref); 

AGENT_REF = 1 
AGENT_REF = 2 
AGENT_REF = 3 
AGENT_REF = 5 

什麼,我想發生是提取從上傳的文件中沒有數據庫AGENT_REF,在這種情況下AGENT_REF = 4,所以我可以從它刪除MySQL的。

$sql_archeck = mysql_query("SELECT `AGENT_REF` FROM `eprentals`"); 
$archeck = mysql_fetch_array($sql_archeck); 
$sqlarArray = array($archeck); 
$combyArrayDiff = array_diff($blmarArray, $sqlarArray); 
print_r ($combyArrayDiff); 

我得到的是從數據庫中的最後或第一個AGENT REF,而不是數據庫中沒有的那些。 (在分貝有11,但上傳的文件只有8是存在的,所以我想刪除(顯示在數據庫中已上傳的文件中刪除的那些)

希望你能爲我提供一些指導,幫助我解決這個問題,並感謝您的時間,併爲您提供幫助!

回答

2

從PHP手冊:

返回包含所有從ARRAY1不在 存在於任何其他陣列的條目的陣列。

所以insted的的array_diff($blmarArray, $sqlarArray)你應該使用array_diff($sqlarArray, $blmarArray)

=大數組作爲第一個參數,而花冤枉錢數組作爲第二個參數


你還需要從數據庫中獲取的所有行,不只是第一個

$query = "SELECT `AGENT_REF` FROM `eprentals`"; 
$resource = mysql_query($query); 
$sqlarArray = array(); 
while($row = mysql_fetch_array($sql_archeck)) 
{ 
    $sqlarArray[] = $row['AGENT_REF']; 
} 
$combyArrayDiff = array_diff($sqlarArray, $blmarArray); 

/* debug result */ 
echo "<p><b>SQL list:</b> " . implode(', ', $sqlarArray) . "</p>"; 
echo "<p><b>Uploaded list:</b> " . implode(', ', $blmarArray) . "</p>"; 
echo "<p><b>Diff list:</b> " . implode(', ', $combyArrayDiff) . "</p>"; 
+0

你好,謝謝你的s peedy響應,這是顯示數據庫中的第一行存在於文件上傳..例如它顯示AGENT_REF = 1,而不是AGENT_REF = 4 :) – Steve 2012-07-19 09:18:19

+0

只是爲了顯示我的結果... :) Array([ 0] =>數組([0] => 53384_3 [AGENT_REF] => 53384_3)) 它應該是53384_7那就是區別:) 53384_3是數據庫中的第一個 – Steve 2012-07-19 09:21:15

+0

您只需取一行, t使用提取循環 – 2012-07-19 09:23:13