嵌套循环中的递减影响外循环
Decrement in Nested Loop Affects Outer Loop
尝试显示 1-10 的随机数,每十四(行)七次,每个数字分配不同的背景颜色。我想过使用 2 个嵌套循环,但它没有按预期工作。然后页面加载很长时间:"Fatal error: Maximum execution time of 30 seconds exceeded in ..."
我尝试删除内部循环的减量,问题消失了,但我没有得到预期的结果。提前致谢。
$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>';
}
试试这个,希望这对你有帮助。问题是你是,
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>';
}
输出:
您尝试删除减量是正确的。递减将通过 运行 额外的迭代对性能产生负面影响。您发布的尝试和其他答案没有纠正这个问题,不幸的是它们 运行 至少 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>';
尝试显示 1-10 的随机数,每十四(行)七次,每个数字分配不同的背景颜色。我想过使用 2 个嵌套循环,但它没有按预期工作。然后页面加载很长时间:"Fatal error: Maximum execution time of 30 seconds exceeded in ..."
我尝试删除内部循环的减量,问题消失了,但我没有得到预期的结果。提前致谢。
$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>';
}
试试这个,希望这对你有帮助。问题是你是,
1. initializing array(
$previousNum = array();
) out ofwhile
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>';
}
输出:
您尝试删除减量是正确的。递减将通过 运行 额外的迭代对性能产生负面影响。您发布的尝试和其他答案没有纠正这个问题,不幸的是它们 运行 至少 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>';