2011-09-04 70 views
0

想法是發佈最大值和最小值,然後生成兩者之間的隨機數。rand()函數不能按預期工作(嵌套在foreach()中)?

例如,$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()需要整數輸入?)可能是t他問題,所以我更新了我的環路變成:

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) } 

沒有人有任何想法,爲什麼這工作不正常?

任何想法/答案/評論將非常感謝:)!

+1

此代碼運行正常見php error reporting(見http://ideone.com/0xD5l)。其他地方一定有一個錯誤。 –

+0

奧利,20和13不是在30-40和40-50之間? – Avicinnian

+0

啊,我看你剛纔編輯了你的問題。所以讓我重述一下。此代碼完全按照我的預期運行。 –

回答

1

你想這樣做嗎? 如果是,你不能在一個又一個圈......

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

編輯,但感謝您的基礎。我真的不知道爲什麼我一開始沒有使用for()'循環,我的鍵是數字和匹配的,所以我應該默認使用它。 – Avicinnian

+0

是的,我忘了= 1初始化...(我接受了編輯; o)) – Whiler

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); 
    } 
} 
+0

這可能是問題!愚蠢的我,我會在一分鐘後回覆:)。 – Avicinnian

+0

仍然轉儲:'array(4){[1] => int(49)[2] => int(53)[3] => int(60)[4] => int(63)}'。最後兩個值的範圍在(50 - 60),(60 - 70)範圍內,但不在前兩個範圍內。 – Avicinnian

1

不知道有什麼期望的結果,但試試這個:

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

看起來你已經有了你的第一個foreach循環筆誤,應該是

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

這導致拋出一個E_NOTICE錯誤,還可以防止從蘭特工作,因爲MINVAL不存在。它總是以已使用error_reporting設置爲顯示在發展的通知,你可以很容易地通過在你的代碼開始加入這個做一個好主意:

error_reporting(E_ALL); 

瞭解更多信息

+0

感謝這個想法,這個問題不僅僅是這個,但我肯定會從現在開始使用錯誤報告! – Avicinnian