【问题标题】:Decrement in Nested Loop Affects Outer Loop嵌套循环的递减影响外循环
【发布时间】:2017-09-28 18:42:53
【问题描述】:

尝试显示 1-10 的随机数字,每十四(行)七次,每个数字被分配不同的背景颜色。我想过使用 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>';
}

【问题讨论】:

  • 希望我的代码能帮到你..
  • 欢迎...... :)

标签: php arrays random html-table nested-loops


【解决方案1】:

您尝试删除减量是正确的。递减将通过运行额外的迭代对性能产生负面影响。您发布的尝试和其他答案没有纠正这一点,不幸的是,它们运行了至少 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>';

【讨论】:

    【解决方案2】:

    试试这个,希望对你有帮助。问题是你,

    1.while循环中初始化数组($previousNum = array();

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

    输出:

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2020-02-16
      • 2012-03-29
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      相关资源
      最近更新 更多