0

例外を除いて、一意のランダム化された配列を生成しようとしていますが、ここまで来ました:

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

しかし、今では、exceptパラメータが配列になくなるまで関数をループさせたい

4

1 に答える 1

0

この問題は、rand_array関数を更新 (またはその修正版を作成) して$except値なしで配列を生成することで解決する方が簡単だと思います。

それができない場合は、 rand_array関数を何度も呼び出す必要のない 1 つの解決策を次に示します。

$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 つ少ない数を指定します。次に、結果をループし、$except値以上の値を 1 ずつ増やします。

これは、$except値が$maxから$maxの範囲にあることを前提としています。そうでない場合は、そのまま戻ることができますrand_array($min, $max, $no_numbers);

于 2013-07-27T21:41:12.270 に答える