Php如何检查重复结果?

时间:2013-08-06 18:10:05

标签: php

您好我正在从数据库基础用户ID查询竞赛,但是我想避免在我的results_array中选择重复项,此函数getrandomspecies接收到array_result,此数组结果迭代7次。如何测试我没有在results_array中放置重复项?我有几个副本。

    function getrandomspecies($array_result){

     //database connection
     $dbn = adodbConnect();

     foreach($array_result as $possible){

    //query the results
    $querys= "select * from taxonomic_units where tsn = $possible";
    $resultss = $dbn -> Execute($querys);

    while($rowss=$resultss->FetchRow()){

        $id = $rowss['tsn']; //there ID
        $ranksss = $rowss['rank_id']; //ranking id, I choose 220 and 230



            if($ranksss == 220 || $ranksss == 230){
                $prelimary_array[] = $id;

            }
        }


   //grab random index
   $index = array_rand($prelimary_array,1);

   //put result id into a variable 
   $newspecies = $prelimary_array[$index];

   //put that variable in an array
    $results_array[] = $newspecies; //there is 7 newspecies/winners at the end, I dont want duplicates
 }

  return $results_array;
}

4 个答案:

答案 0 :(得分:0)

MySQL应该如下:

select distinct tsn, rank_id from taxonomic_units where tsn = $possible

但理想情况下,你应该使用准备好的陈述。

答案 1 :(得分:0)

这是怎么回事?您可以使用一个查询执行此操作:

$querys= "select DISTINCT tsn from taxonomic_units where tsn IN (".implode(",",$array_result).") AND rank_id IN (220,230) ORDER BY RAND() LIMIT 7 ";

答案 2 :(得分:0)

循环结果数组,如果它不存在则添加它。如果你的结果少于7,那就再做一次你的大循环。

替换此行:

$results_array[] = $newspecies;

by:

$loop_1_more_time=0;
if (isset($results_array)){
    foreach($results_array as $result){
        if ($result == $new_specie){
            $loop_1_more_time=1;
        }
    }
}
if ($loop_1_more_time == 0){
    $results_array[] = $newspecies;
}

//如果$ loop_1_more_time等于1,则重新开始。要重新开始并确保你有七个而不是6个或更少,你可以用一个取决于$ array_result的count()的“for”循环替换你的第一个“foreach”循环,$ array_result将是array_result [$ i]而不是$。 $ i将从0开始并在循环的每一端递增。如果$ loop_1_more_time == 1;它将不会递增。 示例:

for ($i = 0; $i < count($array_result); $i++) {
    //stuff
    //if ($loop_1_more_time=1;) { $i--; }
}

答案 3 :(得分:-1)

为什么不尝试改组阵列,然后选择前X个数字?

这样,它不会检查结果数组中的重复项,而是永远不会出现在第一位