将数组与mysql列进行比较,找到不匹配的项目

时间:2012-01-25 04:43:40

标签: php mysql

我有一个php逗号分隔的字符串 $string = (x,y,z)

我在mysql中有一个包含项目(y,z)的列

如何比较两者并回显$ string中哪些项不在列中?

4 个答案:

答案 0 :(得分: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

答案 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

答案 2 :(得分: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";
}

这样做的另一个好处是可以从数据库中检索更少的结果,特别是如果您有一个大型数据集,这是理想的

编辑:在第二行修改了拼写错误(感谢Michael)

答案 3 :(得分:0)

我认为你想用两个逗号分隔的字符串计算不同。

只需使用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”被认为是不同的。