2014-11-24 144 views
0

我正在嘗試創建一個模擬彩票的程序。我用6個隨機數創建我的第一個數組,然後嘗試用隨機數繼續填充我的第二個數組,直到它們相同。當數字介於1到9之間時,它可以正常工作,但是當我將它延長到1到49之間時,就像真正的彩票一樣,我只是抽出時間。試圖比較兩個數組PHP

<?php 

    $number1 = $_POST['number1']; 
    $number2 = $_POST['number2']; 
    $number3 = $_POST['number3']; 
    $number4 = $_POST['number4']; 
    $number5 = $_POST['number5']; 
    $number6 = $_POST['number6']; 


$userArray = array($number1, $number2, $number3, $number4, $number5, $number6); 


// mix and max numbers that can be used with th lottery 
$min = 1; 
$max = 49; 
// random number between 0 and 1 simulating lottery 

    $lotNumber1 = rand ($min, $max); 
    $lotNumber2 = rand ($min, $max); 
    $lotNumber3 = rand ($min, $max); 
    $lotNumber4 = rand ($min, $max); 
    $lotNumber5 = rand ($min, $max); 
    $lotNumber6 = rand ($min, $max); 

$lotArray = array($lotNumber1, $lotNumber2, $lotNumber3, $lotNumber4, $lotNumber5, $lotNumber6); 

asort($userArray); 
asort($lotArray); 

$userString = implode($userArray, "_"); 
$lotString = implode($lotArray, "_"); 


$i = 0; 

set_time_limit(10000); 

while($lotString != $userString) { 

    $i ++; 

    $lotNumber1 = rand ($min, $max); 
    $lotNumber2 = rand ($min, $max); 
    $lotNumber3 = rand ($min, $max); 
    $lotNumber4 = rand ($min, $max); 
    $lotNumber5 = rand ($min, $max); 
    $lotNumber6 = rand ($min, $max); 

    $lotArray = array($lotNumber1, $lotNumber2,    $lotNumber3, $lotNumber4, $lotNumber5, $lotNumber6); 

    asort($lotArray); 

    $lotString = implode($lotArray, "_"); 

} 


echo '<pre>'; 
print_r ($lotString); 
echo '</pre>'; 

echo '<pre>'; 
print_r ($userString); 
echo '</pre>'; 

echo "YOU WON it took ".$i." times"; 


?> 
+2

首先是你正在用錯誤的方式使用implode'string implode(string $ glue,array $ pieces)',所以在你的情況下它會是'$ userString = implode(「_」,$ userArray);','_'是膠水;) – 2014-11-24 13:37:27

+2

也許你只是沒有贏 - 這就是爲什麼它被稱爲彩票;) – Rhumborl 2014-11-24 13:38:55

+0

=))好一個......他只是運氣不佳:( – 2014-11-24 13:39:18

回答

1
$lotNumber1 = rand ($min, $max); 
$lotNumber2 = rand ($min, $max); 
$lotNumber3 = rand ($min, $max); 
$lotNumber4 = rand ($min, $max); 
$lotNumber5 = rand ($min, $max); 
$lotNumber6 = rand ($min, $max); 

是一個問題,你應該使用隨機(範圍(1,49)),並採取了前6,以確保沒有重複。

正如另一個答案所示,它是一個很大的計算,一個在1300萬左右。這就是很多循環使得隨機數和對它們進行排序的,你可能會需要一個較大的超時是30年代

我的代碼是

<?php 

$number1 = 1; 
$number2 = 2; 
$number3 = 3; 
$number4 = 4; 
$number5 = 5; 
$number6 = 6; 


$userArray = array($number1, $number2, $number3, $number4, $number5, $number6); 


// mix and max numbers that can be used with th lottery 
$min = 1; 
$max = 49; 
// random number between 0 and 1 simulating lottery 

$lotArray = (range($min,$max)); 

asort($userArray); 


$userString = implode($userArray, "_"); 
$lotString = ""; 


$i = 0; 

set_time_limit(10000); 

while($lotString != $userString) { 
    $i ++; 
    shuffle($lotArray); 

    $lotA = array_slice($lotArray,0,6); 

    asort($lotA); 

    $lotString = implode($lotA, "_"); 

} 


echo '<pre>'; 
print_r ($lotString); 
echo '</pre>'; 

echo '<pre>'; 
print_r ($userString); 
echo '</pre>'; 

echo "YOU WON it took ".$i." times"; 


?> 

<pre>1_2_3_4_5_6</pre><pre>1_2_3_4_5_6</pre>YOU WON it took 12004536 times

真正0m41.926s

+0

謝謝你的幫助,對我來說似乎仍然超時。我會繼續嘗試! – pocockn 2014-11-24 14:30:13

+1

我的時間在25秒到7分鐘之間。這是一個相當大的計算量。大多數默認超時時間是30秒。我通過命令行運行它來獲得時間。 – exussum 2014-11-24 14:37:05