2013-08-06 91 views
0

您好,我目前正在查询从数据库基础用户ID比赛,但是我想避免在我的results_array中选择重复,这个函数getrandomspecies接收array_result,这个数组结果迭代7次。如何测试我不把重复项放在我的results_array中?我得到了几个重复。Php如何检查重复结果?

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; 
} 
+0

现在有简单的方法来解决这个问题。你可以尝试在你的查询中使用group by *从taxonomic_units中选择*其中tsn = $可能的组由tsn。或由其他一些库仑组合。 – pregmatch

+0

改变你的mysql查询来选择不同或分组由 –

+0

使用Mysql的'DISTINCT' –

回答

-1

为什么不尝试洗牌数组,然后选择第一个X数?

通过这种方式,而不必重复检查结果阵,就再也回不来了摆在首位

+0

尽管可能有10个重复,这可能在洗牌后结束在数组顶部 –

+0

不应该,这应该在sql语句中完成 – sgroves

0

MySQL的应该是以下几点:

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

但你应该理想地使用准备好的声明。

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 "; 
0

循环你的结果数组,如果它不存在添加它。如果最终结果少于7个,再次做你的大循环。

替换此行:

$results_array[] = $newspecies; 

由:

$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,重新开始。要重新开始并确保你有7个,而不是6个或更少,你可以用一个依赖于$ array_result的count()的“for”循环替换你的大的第一个“foreach”循环,$ array_result将是array_result [$ i]而不是$可能。 $我会从0开始,并在循环的每一端增加。如果$ loop_1_more_time == 1;它不会增加。 例如:

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

嘿,我得到了一个无限循环,我尝试了你的解决方案,你能帮我吗?我逐字执行它 – user2604754

+0

*请注意,您在开始时计算的数组必须是非关联的。你可以报告的事实是,即使它重新启动,每个循环中也不会有7个可能的不同元素,因此循环变得无限并且永远搜索新的元素,而没有。 –

+0

我还在两个代码示例中添加了更正 –