2013-07-27 2 views
0

Je suis en train de générer un tableau aléatoire unique avec des exceptions, i a jusqu'ici:php gamme unique de nombres aléatoires à l'exception

function rand_except($min, $max,$no_numbers, $except) { 
    //loop until you get a unique randomized array without except number 

    $end=false; 
    while (!$end){ 
    $numbers = rand_array($min, $max,$no_numbers);//get unique randomized array 
    if(!in_array($except,$numbers)){ 
     $end=true; 
     break; 
    } 

    } 
return $numbers; 
} 

mais maintenant je veux la fonction de boucle jusqu'à ce que l'exception paramètre n » t dans le tableau

+0

Ne serait-il pas plus efficace d'ajouter cette fonctionnalité à la fonction * rand \ _raye * plutôt que de l'appeler encore et encore jusqu'à ce qu'elle produise la sortie que vous voulez? –

Répondre

0

Je pense qu'il serait plus facile de résoudre ce problème en mettant à jour la fonction rand_array (ou écrire une version modifiée de celui-ci) pour générer le tableau sans $, sauf valeur pour commencer.

Si ce n'est pas une option, voici une solution qui ne nécessite pas d'appeler la rand_array fonction encore et encore:

$numbers = rand_array($min, $max-1, $no_numbers); 
for ($i = 0; $i < count($numbers); $i++) { 
    if ($numbers[$i] >= $except) { 
    $numbers[$i] += 1; 
    } 
} 

Vous appelez la fonction rand_array mais spécifiez un de moins que le nombre maximum réel que vous voulez dans le tableau. Puis boucle vous sur les résultats, et toute valeur est supérieure ou égale à la $, sauf valeur, incrémenter de 1.

Cela suppose que le $, sauf valeur est comprise entre $ max à $ max. Sinon, vous pouvez simplement retourner rand_array($min, $max, $no_numbers); tel quel.