J'essaie de créer un tableau avec des nombres entrés par l'utilisateur, puis un autre tableau avec des nombres aléatoires compris entre 0 et 9. Je souhaite ensuite comparer les 2 tableaux et, lorsqu'ils correspondent, renvoyer un résultat.
Au moment où je reçois une erreur fatale:
Maximum execution time of 30 seconds exceeded
Je sais que les éléments sont entrés correctement dans le tableau après utilisation var_dump
.
$i = 0;
while(!in_array($lotArray, $userArray)) {
$i ++;
}
echo "YOU WON it took".$i."times";
?>
Réponses:
2 pour la réponse № 1Utiliser une approche itérative pour comparer chaque nombre est Oh(n²)
parce que vous devez comparer X fois X nombres.
Au lieu de cela, adoptez une approche simple:
- Triez les deux tableaux de la même manière. (
Oh(n log n)
chaque) - créez une chaîne à partir d'eux (
Oh(n)
) - comparer les chaînes. (
Oh(n)
)
comme
$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!";
}
1 pour la réponse № 2
cela fonctionne bien
$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
}
Cela vous permet de créer autant de nombres aléatoires que l'utilisateur choisit.
1 pour la réponse № 3
Si vous souhaitez comparer deux tableaux (tous les nombres doivent être identiques, dans le même ordre):
$a1 = array(1, 9, 4);
$a2 = array(1, 9, 4);
if (count(array_diff($a1,$a2)) == 0)
echo "Both array match";