2014-10-11 58 views
0

我正在嘗試用用戶輸入的數字創建一個數組,然後使用0和9之間的隨機數創建另一個數組。然後我想比較兩個數組,並在匹配時回顯出結果。試圖比較兩個數組中的數字PHP

目前,我收到一個致命的錯誤:

Maximum execution time of 30 seconds exceeded

我知道的元素在陣列中使用var_dump後輸入正確。

$i = 0; 
while(!in_array($lotArray, $userArray)) { 
    $i ++; 
} 

echo "YOU WON it took".$i."times"; 
?> 
+1

如果'in_array()'返回'false'一次,是什麼讓你認爲給'$ i'加'1'會改變結果? 'in_array'仍然是錯誤的。考慮這個:「去商店買晚餐吧,好吧,我買了一些冰淇淋''不,去商店買晚餐'好吧,我買了另一種冰淇淋'''去商店..'*「 – h2ooooooo 2014-10-11 11:53:49

+1

in_array()的哪個參數是您要搜索的值?看起來他們都是陣列。 – 2014-10-11 11:56:11

+1

如果你可以寫下這兩個數組的var_dump輸出示例,我們可以更容易地給予幫助 – Yoric 2014-10-11 12:00:06

回答

2

使用迭代方法比較每個數字是Oh(n²),因爲您必須比較X次X次數。

相反,採取簡單的方法:

  • 排序以同樣的方式兩個數組。 (Oh(n log n)各自)
  • 創建一個字符串出他們(Oh(n)
  • 比較字符串。 (Oh(n)

$arr1 = array(1,2,3); 
$arr2 = array(2,3,1); 

asort($arr1); 
asort($arr2); 

$string1 = implode($arr1, "_"); // "1_2_3" 
$string2 = implode($arr2, "_"); // "1_2_3" 

if ($string1 == $string2){ 
    echo "You've won!"; 

}

+2

令人驚歎的思想! – 2014-10-11 12:11:09

1

這工作得很好

$count  = //your wish of getting random numbers. 
$randarr = range('0','9'); 

$randarr = array_rand($randarr,$count); 

$difference= array_diff($randarr,$arr); //let $arr be your array 

if(count($difference)==0) 
{ 
    //your display code 
} 

這使您可以爲用戶選擇創造儘可能多的隨機數。

1

如果你婉比較兩個陣列(所有數字必須是相同的,以相同的順序):

$a1 = array(1, 9, 4); 
$a2 = array(1, 9, 4); 

if (count(array_diff($a1,$a2)) == 0) 
    echo "Both array match";