2014-11-24 122 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