Php如何检查重复的结果?
您好,我目前正在从数据库基用户ID查询竞赛,但是我希望避免在结果数组中选择重复项,此函数getrandomspecies接收数组结果,此数组结果迭代7次。如何测试我不在结果数组中放置重复项?我得到了几份副本Php如何检查重复的结果?,php,Php,您好,我目前正在从数据库基用户ID查询竞赛,但是我希望避免在结果数组中选择重复项,此函数getrandomspecies接收数组结果,此数组结果迭代7次。如何测试我不在结果数组中放置重复项?我得到了几份副本 function getrandomspecies($array_result){ //database connection $dbn = adodbConnect(); foreach($array_result as $possible){
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;
}
为什么不尝试洗牌数组,然后选择前X个数字
这样,就不必检查结果数组中是否有重复项,它将永远不会出现在第一位MySQL应该是:
select distinct tsn, rank_id from taxonomic_units where tsn = $possible
但你最好使用事先准备好的陈述。这是怎么回事?您可以通过一个查询执行此操作:
$querys= "select DISTINCT tsn from taxonomic_units where tsn IN (".implode(",",$array_result).") AND rank_id IN (220,230) ORDER BY RAND() LIMIT 7 ";
循环结果数组,如果它不存在,则添加它。如果你最后的成绩不到7分,再做一次大循环 替换此行:
$results_array[] = $newspecies;
作者:
//在这里,如果$loop\u 1\u more\u time等于1,则重新开始。要重新开始并确保只有7个而不是6个或更少,可以将第一个大的“foreach”循环替换为一个“for”循环,该循环取决于$array\u结果的count(),并且$array\u结果将是array\u结果[$i],而不是$mably$我将从0开始,在循环的每一端递增。如果$loop\u 1\u more\u time==1;,则它不会增加;。
例如:
for ($i = 0; $i < count($array_result); $i++) {
//stuff
//if ($loop_1_more_time=1;) { $i--; }
}
for($i=0;$i
现在有了一个简单的方法。您可以尝试在查询中使用group by从分类单位中选择*,其中tsn=$可能的group by tsn。或者由其他coulmn进行分组。更改您的mysql查询以选择distinct或group byUse mysql的distinct
认为此代码是由sssnakess编写的。但是,它们可能有10个重复项,在shufflinghey之后可能会出现在数组顶部。我得到了一个infinte循环。我尝试了所有解决方案,您能帮助我吗。我一字不差地实现了它。请注意,开始计算的数组必须是非关联的。您所报告的是,每个循环中不可能有7个不同的元素,即使它重新启动,因此循环将无限大,并在没有元素的情况下永远搜索新元素。
for ($i = 0; $i < count($array_result); $i++) {
//stuff
//if ($loop_1_more_time=1;) { $i--; }
}