2012-01-25 50 views

回答

0

我想你想計算differente兩個逗號組合通道ated字符串。

使用explode只是轉換你的字符串數組,並使用array_diff

array_diff - 計算數組

的差異舉例:

<?php 

$array1=explode(",",$string); 
$array2=explode(",",$yourstring_of_db_column); 
$array1 = array("x", "y", "z"); 
$array2 = array("y","z"); 
$result = array_diff($array1, $array2); 

print_r($result); 
?> 

注意值是使用===比較,所以1和「1」被認爲是不同的。

0

這背後的邏輯是首先用explode(", ", $string)函數爆炸字符串。
這樣它就會成爲一個數組。

而在另一方面檢查值與功能in_array()

例如:

$a = array(array('p', 'h'), array('p', 'r'), 'o'); 

if (in_array(array('p', 'h'), $a)) { 
    echo "'ph' was found\n"; 
} 
//output : 'ph' was found 
+0

這並不能解釋如何與存儲在MySQL中的數據進行比較。 –

+0

@MichaelMior我剛剛清除了邏輯,因爲提問者沒有提供任何代碼, –

+0

OP沒有提到有關嵌套數組的任何內容。你可以考慮簡化你的例子。 –

1

我認爲應該做的伎倆。祝你好運。

$myString="v1,v2,v3"; 
$stringA=explode(",",$myString); 

$result=mysql_query("SELECT * FROM data"); 
while($row = mysql_fetch_array($result)){ 
$data=$row['dataColumn']; 
if (!in_array($data,$stringA)) echo $data . "<br>"; 
}//end while 

如果您需要在列中展開數據,我們可以進一步深入。

$myString="v1,v2,v3"; 
$stringA=explode(",",$myString); 

$result=mysql_query("SELECT * FROM data"); 
while($row = mysql_fetch_array($result)){ 
$data=$row['dataColumn']; 
$da=explode(",",$data); 
foreach($da as $value) if (!in_array($value,$stringA)) echo $data . "<br>"; 
}//end while 
+0

很少有很好的理由來做'SELECT * FROM data'。如果目標是檢查一列的值,那麼最好只選擇該列。考慮只爲需要測試的行取代數據,而不是整個表也是很好的做法。 –

+0

是的,我知道這一點。我習慣這樣做。 –

+0

只是指出這是爲了OP的好處,因爲這是不好的做法。 –

0

,你可以使用一個查詢解決這個問題,只是檢索不匹配的行,例如:

$string= "(str1, str2, str3)"; //formatted as the OP indicated 
$input = explode(",",trim($string,"() ")); 
$filter = "(".$input[1].",".$input[2].")"; 

$sql = "select interestingColumn from greatTable where interestingColumn not like '".$filter."'"; 
$rez = mysql_query($sql); 
while($row = mysql_fetch_array($rez)){ 
    echo $row["interestingColumn"]."<br>\n"; 
} 

這有來自數據庫,這是理想的檢索結果較少的好處特別是如果你有一個大的數據集

編輯:固定在第二行一個錯字(感謝邁克爾)

+0

@Bogan'$ filter'中的東西需要被引用並且可能會被轉義。第二行還有幾個語法錯誤。 –

+0

是的,顯然你需要過濾你的數據並使其安全,我試圖用準系統實現來顯示一般想法(沒有運行代碼,所以語法錯誤很可能) – Bogdan