3
function nonrecgen($min, $max, $amount) {
for($i=0;$i<$amount;$i++) {

$NrArray[$i] = rand($min,$max);
echo $NrArray[$i];
do  {
    for($j=0;$j<=$i;$j++) {
      if ($NrArray[$j] == $NrArray[$i]) {
      $NrArray[$i] = rand($min,$max);   }     
                          }
       $Reccuring = false;
   if ($i > 0) {
    for($k=0;$k<=$i;$k++) {
      if ($NrArray[$k] == $NrArray[$i]) {
       $Reccuring = true;               }
                          }
               }
    }
while ($Reccuring = true);
                          }
Return $NrArray;                                        
                                        }

$Test = nonrecgen(0,1,2);
print_r($Test);

繰り返しのない数値の配列を生成する方法を調べたかったのですが、これは確かに私が信じる最も効率的な方法ではありませんが、最初の反復で無限にループする理由を理解できないようです。論理分析を何度も試しましたが、何か足りないものがあるはずです。

4

3 に答える 3

29
do {
...
} while ($Reccuring = true);

whileステートメントは、$ Reccuringを評価するのではなく、trueに設定するためです。

試す:

do {
...
} while ($Reccuring === true);
于 2012-08-21T19:42:54.453 に答える
6

現在、チェックではなく値を割り当てています(これは常にtrueになります)。

次のように変更します。 while ($Reccuring == true);

于 2012-08-21T19:43:08.737 に答える
6

あなた以外=にも間違った場所で==リセットしていました:$Recurring

<?
function nonrecgen($min, $max, $amount) 
{
    for($i=0;$i<$amount;$i++) 
    {
        $NrArray[$i] = rand($min,$max);
        do  
        {
            for($j=0;$j<=$i;$j++) 
            {
                if ($NrArray[$j] == $NrArray[$i]) 
                {
                    $NrArray[$i] = rand($min,$max);  
                }     
            }
            if ($i > 0) 
            {
                for($k=0;$k<=$i;$k++) 
                {
                    if ($NrArray[$k] == $NrArray[$i]) 
                    {
                        $Reccuring = true;               
                    }
                }
            }
            $Reccuring = false;
        }
        while ($Reccuring == true);
    }
    return $NrArray;                                        
}
$Test = nonrecgen(0,2,5);
echo "<pre>";
print_r($Test);
?>
于 2012-08-21T19:57:03.077 に答える