rand()函数没有按预期工作(嵌套在foreach()中)?

时间:2011-09-04 22:16:01

标签: php loops random

这个想法是发布最大值和最小值,然后生成两者之间的随机数。

例如,$mins = array(30,40,50,60)$maxs = array(40,50,60,70),然后是我的代码:

foreach($mins as $minkey => $maxval) {
    foreach($maxs as $maxkey => $maxval) {
            $hits[$maxkey] = rand($minval,$maxval);
    }
}

如果我然后var_dump($mins)var_dump($maxs)var_dump($hits),我会:

array(4) { [1]=> string(2) "30" [2]=> string(2) "40" [3]=> string(2) "50" [4]=> string(2) "60" } array(4) { [1]=> string(2) "40" [2]=> string(2) "50" [3]=> string(2) "60" [4]=> string(2) "70" } array(4) { [1]=> int(27) [2]=> int(36) [3]=> int(19) [4]=> int(41) }

我认为$maxs$mins包含字符串值的事实,而包含整数的$hits(即rand()需要整数输入?)可能是问题所以我更新了我的循环成为:

foreach($mins as $minkey => $minval) {
    foreach($maxs as $maxkey => $maxval) {
        $minval = (int)$minval;
        $maxval = (int)$maxval;
            $hits[$maxkey] = rand($minval,$maxval);
    }
}

但是在var_dump($mins)var_dump($maxs)var_dump($hits),这被抛弃了:

array(4) { [1]=> string(2) "30" [2]=> string(2) "40" [3]=> string(2) "50" [4]=> string(2) "60" } array(4) { [1]=> string(2) "40" [2]=> string(2) "50" [3]=> string(2) "60" [4]=> string(2) "70" } array(4) { [1]=> int(0) [2]=> int(47) [3]=> int(0) [4]=> int(55) }

有没有人知道为什么这不能按预期工作?

非常感谢任何想法/答案/评论:)!

4 个答案:

答案 0 :(得分:1)

如果您要覆盖变量:

foreach($mins as $minkey => $maxval) {
    foreach($maxs as $maxkey => $maxval) {
            $hits[$maxkey] = rand($minval,$maxval);
    }
}

我假设应该是:

foreach($mins as $minkey => $minval) {
    foreach($maxs as $maxkey => $maxval) {
            $hits[$maxkey] = rand($minval,$maxval);
    }
}

答案 1 :(得分:1)

你想这样做吗? 如果是的话,你不能在另一个循环中有一个循环...

for($i = 1; $i <= sizeof($mins); $i++) {
  $hits[$i] = rand($mins[$i], $maxs[$i]);
}

答案 2 :(得分:1)

不知道预期的结果是什么,但试试这个:

for ($i=0, $len = count($mins); $i < $len; $i++) {
    $hits[$i] = rand($mins[$i], $maxs[$i]);
}

答案 3 :(得分:1)

看起来你的第一个foreach循环有一个拼写错误,它应该是

foreach($mins as $minkey => $minval)

这会导致抛出E_NOTICE错误,并且还会阻止rand工作,因为minval不存在。将error_reporting设置为显示开发中的通知总是一个好主意,您可以通过在代码的开头添加它来轻松完成:

error_reporting(E_ALL);

有关详细信息,请参阅php error reporting