继续生成随机数,直到一个不存在 - PHP

时间:2012-03-22 15:41:01

标签: php string loops random while-loop

我有一个包含许多不同数字的字符串。我正在尝试创建一个新的随机数并将其添加到字符串中。

我需要帮助的部分是“如果数字已经存在于字符串中,则创建一个新的随机数,并继续这样做,直到创建一个在字符串中尚不存在的数字”。

// $string contains all the numbers separated by a comma
$random = rand(5, 15);

$existing = strpos($string, $random);

if ($existing !== false) { $random = rand(5, 15); }

$new_string = $string.",".$random;

我知道这不太对,因为它只检查它是否存在一次。我需要它继续检查以确保字符串中不存在随机数。我是否使用while循环?如何更改此功能才能正常工作?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

像Endijs一样运作的解决方案......但我想发布:)

$string = '6,7,8';
$arr = explode(',', $string);

$loop = true;
while($loop) {
    $randomize = rand(5, 15);
    #var_dump($randomize);
    $loop = in_array($randomize, $arr);
    if (!$loop) {
        $arr[] = $randomize;
    }
}

$newString = implode(',', $arr);
var_dump($newString);

答案 1 :(得分:0)

检查字符串中的数据不是最佳解决方案。多数民众赞成因为如果你的随机数将是'5',并且在字符串中你将有15,strpos将找到5的精确度。我会将字符串转换为数组并对其进行搜索。

$a = explode(',' $your_string);
$random = rand(5, 15);  
while (in_array($random, $a))
{
    $random = rand(5, 15);      
}
$a[] = $random;
$your_string = implode(',', $a);

更新 - 请注意 - 如果所有可能的变量都已经在字符串中,那么它将是无限循环。