2013-07-27 3 views
0

Я пытаюсь создать уникальный рандомизированное массив с исключениями, я получил это далеко:PHP уникальное рандомизированные номера массива, за исключением

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; 
} 

, но теперь я хочу функцию в цикле, пока кроме параметра ISN» т в массиве

+0

Не было бы более эффективно добавлять эту функциональность функции * rand \ _array *, а не вызывать ее снова и снова до тех пор, пока она не выдаст требуемый результат? –

ответ

0

Я подозреваю, что это было бы легче решить эту проблему путем обновления rand_array функции (или записи модифицированной версии этого), чтобы создать массив без $ за исключением значения, чтобы начать с.

Если это не вариант, вот один из возможных решений, которые не связаны с вызовом rand_array функции снова и снова:

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

Вы называете rand_array функцию, но указать один меньше чем фактическое максимальное количество, которое вы хотите в массиве. Тогда вам цикл по результатам, и любое значение, которое больше или равно $ за исключением значения, то увеличиваем на 1.

Это предполагает, что $ за исключением значение находится в диапазоне от $ макс до $ max. Если нет, вы можете просто вернуть rand_array($min, $max, $no_numbers); как есть.

Смежные вопросы