这个想法是发布最大值和最小值,然后生成两者之间的随机数。
例如,$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) }
有没有人知道为什么这不能按预期工作?
非常感谢任何想法/答案/评论:)!
答案 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