如果相同的随机数重复,则继续循环

时间:2014-05-22 14:57:27

标签: php

我想从MySQL数据库生成随机文章,结果有5篇不同的文章。我尝试使用preg_match()。

$random_post = 5;
$unique_number = "";

do {
    $random_post--;
    $rand_id = rand($min_range, $max_range);
    $unique_number .= " ".$rand_id;

        if (!preg_match("/$rand_id/", $unique_number)) {
            get_article($rand_id);  
        }
} while ($random_post);

我也尝试使用strpos()。

$random_post = 5;
$unique_number = "";

do {
    $random_post--;
    $rand_id = rand($min_range, $max_range);
    $unique_number .= " ".$rand_id;

        if (strpos($unique_number, $rand_id) === false) {
            get_article($rand_id);  
        }
} while ($random_post);

但仍然生成相同的随机数。喜欢2 6 12 2 6,13 9 13 3 3 11 13 13 12 11.我认为我使用的功能不正确或代码流中有错误。

5 个答案:

答案 0 :(得分:2)

您在检查结果是否重复之前,会在结果中添加新号码。因此,您的if条件将始终为假,并且您永远不会收到您的文章。

将这些行移到if块中:

$random_post--;
$unique_number .= " ".$rand_id;

答案 1 :(得分:1)

是否必须通过PHP完成?您可以使用SQL执行类似的操作:

SELECT your, things FROM table ORDER BY RAND() LIMIT 5

选择5个不同的条目,从不相同的两次

答案 2 :(得分:0)

为什么使用字符串来保存这些数据?我建议一个阵列:

$random_post = 5;
$unique_number = array();

do {

    $rand_id = rand($min_range, $max_range);

        if (!in_array($rand_id, $unique_number)) {
            get_article($rand_id);  
            $unique_number[] = $rand_id;
            $random_post--;
        }


} while ($random_post);

如果你需要一个由这些数字组成的字符串用于其他目的,你可以使用implode:

$unique_string = implode(" ", $unique_number);

答案 3 :(得分:0)

试试这个:它只会使用rand所需的次数。

//Create an array with available range
$items = range($min_range, $max_range);
//Number of posts
$posts = 5
//Final list
$answer = array();

for($x = 0; $x < 5; $x++) {
    //Generate a random number from 0 to number of items available in the array
    $rand = rand(0, count($items) - 1);
    //Get the item at the given random position
    $answer[] = $items[$rand];
    //Remove the used item from the array
    array_splice($items, $rand, 1);
}

以上示例仅生成5个随机数,它将为您提供所需的ID。

答案 4 :(得分:0)

简短的脚本:

$ids = range($min, $max);
shuffle($ids);
foreach(array_slice($ids, 0, $random_post) as $id)
    get_article($id);

如果您有很多文章,我会使用类似

的内容
$ids = array();
while(count($ids) < $random_post)
{
    $id = rand($min, $max);
    if(!isset($ids[$id))
        get_article($ids[$id] = $id);
}