如何遍历数据库结果,将每个值与数组中的值进行比较并返回匹配的id?

时间:2013-12-11 18:52:41

标签: php arrays loops

这是我的第一篇文章,所以请光临我。如果这个问题有一个非常简单的解决方案,或者我没有非常清楚地解释自己,我会事先道歉。 - 另外,我大部分都是自学成才,如果我的工作很草率,我很抱歉。

我正在尝试构建一个将被赋予数组的函数。从这个数组中,遍历数据库中的整个表,试图找到匹配项。如果确实找到了匹配项。我希望它从数据库表中回显出该匹配的ID。

如果可能,我还想说它是否发现任何近距离匹配?


让我觉得棘手的是它需要匹配所有值,尽管它们的顺序......

例如,如果函数给定此数组:

$array = array(1,2,3,4,5)

并在数据库中找到此数组:

$array = array(2,3,5,1,4)

它应该认为这是一个匹配

另外,如果发现;

array(1,2,3,4,5,6)

除了值6之外,它应该将此输出为匹配;

我希望我已经足够清楚了。提前感谢您的任何帮助,所有的帮助表示赞赏。

提前谢谢你,格雷格。

4 个答案:

答案 0 :(得分:1)

让我重新回答你的问题,这是正确的吗?

  

根据ID数组,返回ID在数组中的所有记录。

如果是,请使用IN operator

SELECT *
FROM tableName
WHERE columnName IN (value1, value2, value3, etc.)

首先,我们需要将给定数组转换为逗号分隔列表:

$comma_seperated = implode(', ', $array);

现在我们有一个逗号分隔的列表,我们可以在查询中使用:

$comma_seperated = implode(', ', $array);

$query = "SELECT *
FROM tableName
WHERE id IN (" . $comma_seperated . ")";

// execute query, don't use mysql_* functions, etc. ;)

答案 1 :(得分:1)

您可以使用以下任何选项:

选项1:

$array = array(1,2,3,4,5);
$query = "SELECT id FROM youtable WHERE id IN(".implode(",",$array).")";

选项2:

$array = array(1,2,3,4,5);
$query = "SELECT id FROM yourtable";//Select ids

现在遍历查询结果,说结果存储在$ query_results,

$result=array();
foreach($query_results as $row){
   if(in_array($row['id'],$array)){
           $result[] = $row['id'];
   }

}

答案 2 :(得分:0)

您可以使用数组差异来获取结果,只需运行代码即可理解 案例1

$array1 = array(1,2,3,4,5);
$array2 = array(1,2,3,4,5,6);
$result = array_diff($array1, $array2);

print_r($result);

案例2

$array1 = array(1,2,3,4,5);
$array2 = array(1,2,3,4,5,6);
$result = array_diff($array2, $array1);

print_r($result);

然后你可以计算$ result并把它放在你的逻辑中。

答案 3 :(得分:0)

案例1:

也许您可以从数据库中选择唯一值。

SELECT DISTINCT unique_values_that_need_for_compare_column FROM table

此SQL结果将是 $ databaseValues 变量值。

迭代函数获取的数组。

foreach ($functionArray as $value) {
    if (in_array($value, $databaseValues)) {
        // you have a match
        echo $value;
    }
}

案例2:

或者您可以对每个值进行查询:

foreach ($functionArray as $value) {
    $query = "SELECT COUNT(*) as match FROM table WHERE unique_values_that_need_for_compare_column = " . intval($value);
    // fetch the result into the $queryResult variable and than check
        if ($queryResult['match']) {
            // you have a match
            echo $value;
        }
    }