2017-05-01 14 views
2

1から10までの乱数を表示しようとすると、各番号が14(行)ごとに7回、異なる背景色が割り当てられます。 2つのネストされたループを使用することを考えましたが、期待どおりに機能しません。 「致命的なエラー:最大実行時間が30秒を超えました...」ネストループの減少が外側ループに影響する

内部ループの減分を削除しようとしましたが、問題はなくなりましたが、予想された結果。前もって感謝します。

$colors = array("grey","white","yellow","red","blue","green","brown","purple","orange","black"); 
$previousNum = array(); 
$k = 0; 
echo '<table>'; 
while ($k < 15){ 
    $k++; 
    echo '<tr>'; 
    for($i = 0; $i < 7; $i++){ 
     $randNum = mt_rand(1, 10); 
     if(!in_array($randNum, $previousNum)){ 
      echo '<td style="background-color: '.$colors[$randNum-1].'; padding: 10px;">'; 
      echo $randNum; 
      echo '</td>';  
      array_push($previousNum, $randNum); 
     }else{ 
      $i--; 
     } 
    } 
    echo '</tr>'; 
} 
+0

私のコードはあなたを助けてくれるでしょう。 –

+0

ありがとうございました。 –

+0

ようこそ:) –

答えて

0

これを試してください、これがあなたを助けてくれることを願ってください。問題は、あなたがいたということでした

1. initializing array($previousNum = array();) out of while loop

<?php 

$colors = array("grey", "white", "yellow", "red", "blue", "green", "brown", "purple", "orange", "black"); 
$k = 0; 

echo '<table>'; 

while ($k < 15) 
{ 

    echo '<tr>'; 

    $previousNum = array(); 
    for ($i = 0; $i < 7; $i++) 
    { 
     $randNum = mt_rand(1, 10); 
     if (!in_array($randNum, $previousNum)) 
     { 

      echo '<td style="background-color: ' . $colors[$randNum - 1] . '; padding: 10px;">'; 
      echo $randNum; 
      echo '</td>'; 
      array_push($previousNum, $randNum); 
     } 
     else 
     { 
      $i--; 
     } 
    } 

    $k++; 
    echo '</tr>'; 
} 

出力:

enter image description here

0

あなたは右の減少分を削除しようとしました。この減分は、追加の繰り返しを実行することでパフォーマンスに悪影響を及ぼします。あなたの投稿された試行と他の答えはこれを修正しませんが、残念ながら最低105(7x15)の条件文を実行します。これはベスト・プラクティスではなく、SO読者の勉強には向いていません。宣言や反復を無駄にすることなく、最適化された新しいソリューションを作成し、暗い背景に白色のフォントの色を追加しました。

echo '<table>'; 
$whitefonts=['black','purple','brown','grey','blue']; // for visibility 
for($k=0; $k<15; ++$k){ 
    $colors=["grey","white","yellow","red","blue","green","brown","purple","orange","black"]; 
    echo '<tr>'; 
    for($i=0; $i<7; ++$i){ 
     $key=array_rand($colors); 
     $color=$colors[$key]; 
     unset($colors[$key]); 
     echo "<td style=\"background-color:$color;"; 
      if(in_array($color,$whitefonts)){echo "color:white;";} // for visibility 
     echo "padding:10px;\">",++$key,"</td>"; 
    } 
    echo '</tr>'; 
} 
echo '<table>'; 
関連する問題