试图比较PHP的两个数组

时间:2014-11-24 13:34:57

标签: php arrays

我正在尝试创建一个模拟彩票的程序。我用6个随机数创建我的第一个数组,然后尝试用随机数填充我的第二个数组,直到它们相同。当数字介于1和9之间时它起作用,但是当我将它扩展到1到49之间时,就像真正的彩票一样,我只是抽出时间。

<?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";


?>

1 个答案:

答案 0 :(得分: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); 

是个问题,你应该使用shuffle(范围(1,49))并取第6个以确保没有重复。

正如另一个答案所示,这是一个很大的计算,一个在1300万左右。这就是很多循环产生随机数并对它们进行排序,你可能需要更大的超时30s

我的代码是

<?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