【问题标题】:Keep generating random number until one does not exist - PHP继续生成随机数,直到一个不存在 - PHP
【发布时间】:2012-04-07 05:09:51
【问题描述】:

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

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

// $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循环吗?我该如何改变它才能正常工作?

非常感谢您的帮助。

【问题讨论】:

  • 你需要它是一个字符串吗?这使得它比需要的复杂得多。
  • 我已经将它简化为张贴在这里,但字符串包含一个mysql行的值。
  • rand(5, 15) 是示例还是随机数的实际范围?
  • 请注意,您应该改用mt_rand(),因为rand() 不是那么随机,并且平均而言,连续重复相同的数字比 mt_rand 多,这意味着它可以/可能通过丢失浪费的迭代来加速循环。

标签: php string loops random while-loop


【解决方案1】:

检查字符串中的数据不是最好的解决方案。那是因为如果你的随机数是'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);

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

【讨论】:

  • 我试着把这个例子简单化,但字符串比这复杂得多,随机数实际上是字母和数字的随机八字符组合,所以随机字符不可能出现在字符串中,除非它合法地存在。
【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多