如何在 PHP 的 for 循环中实现 foreach?
How to implement a foreach inside a for loop in PHP?
我是 PHP 和 Whosebug 的新手。如果我在这里犯了错误,请纠正我的问题。
我在这里要完成的目标是获得随机颜色(for 循环),然后是相应的序列(foreach)。下面是我的代码。
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for ($x = 1; $x <= 10; $x++) {
$color_random = $color[array_rand($color)];
echo $color_random . "- ";
}
foreach ($sequence as $sequence_value) {
echo $sequence_value . "- ";
}
目前结果是"黄-绿-黄-红-绿-绿-红-绿-黄-绿-R-B-B-"
.
如何将 it/change 转换为 yellow-R- green-B- yellow-B- red-R- green-B- green-B- red-R- green -B- yellow-B- green-R- (random color - sequence -) 可以看到,随机生成了10种颜色,但是顺序是这样的。
任何答案或评论都会很棒,因为这对我和其他人来说都是学习进步。谢谢。
你可以试试这个:
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for ($x = 1; $x <= 10; $x++) {
foreach ($sequence as $sequence_value) {
$color_random = $color[array_rand($color)];
echo $color_random . "- " . $sequence_value . "- ";
}
}
每一对都是一个列表中的随机事物,再加上另一个列表中的下一个事物。您对随机事物列表很在行,但是在每个循环中您都需要弄清楚要使用序列列表中的哪个元素。
只有一个循环。
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for ($x = 1; $x <= 10; $x++) {
$color_random = $color[array_rand($color)];
$sequence_index = ????
$sequenceValue = $sequence[$sequence_index];
echo $color_random . "- " . $sequenceValue . "- ";
}
那么如何找到正确的序列索引呢?方法不止一种,但最简单的是模运算符。当 x = 1
时,您想要序列列表中的第一项(索引 0)。当x = 2
,你想要第二个。当x = 4
时,你想返回并再次获取索引0。
当你将两个整数相除时,Modulo 给你余数,所以它进入一个循环。 x % 3
将 几乎 给你你想要的。 (%
是 php 和许多其他语言中模运算符的符号)
要注意的是 1 % 3 = 1
所以当 x = 1 时你会得到索引 1(而不是期望的 0),而 3 % 3 = 0
所以当 x = 3 时你会得到索引 = 0 (而不是所需的 3)。序列与您想要的相差一个。
解决此问题的最简单方法是使 $x
从 0 - 9 而不是 1 - 10。如果 x 以 0 开头,则很好:
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for ($x = 0; $x <= 9; $x++) {
$color_random = $color[array_rand($color)];
$sequence_index = $x % 3;
$sequenceValue = $sequence[$sequence_index];
echo $color_random . "- " . $sequenceValue . "- ";
}
或者,如果出于某些其他原因必须从 $x
开始,您可以使用 $sequence_index = ($x - 1) % 3
。
为了让你的代码更能适应变化,最后一件事是调整以覆盖序列数组的长度变化:
$sequence_index = $x % count($sequence);
因此,如果您更改顺序,则不必记得也更新循环。
您不需要 2 个循环或嵌套循环来创建此序列,我更喜欢使用 %
使其 O(n)
共谋。
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for($i = 0; $i < 10; $i++){
echo " {$color[array_rand($color)]} - {$sequence[$i%count($sequence)]} -";
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder
希望对您有所帮助
我是 PHP 和 Whosebug 的新手。如果我在这里犯了错误,请纠正我的问题。 我在这里要完成的目标是获得随机颜色(for 循环),然后是相应的序列(foreach)。下面是我的代码。
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for ($x = 1; $x <= 10; $x++) {
$color_random = $color[array_rand($color)];
echo $color_random . "- ";
}
foreach ($sequence as $sequence_value) {
echo $sequence_value . "- ";
}
目前结果是"黄-绿-黄-红-绿-绿-红-绿-黄-绿-R-B-B-" .
如何将 it/change 转换为 yellow-R- green-B- yellow-B- red-R- green-B- green-B- red-R- green -B- yellow-B- green-R- (random color - sequence -) 可以看到,随机生成了10种颜色,但是顺序是这样的。
任何答案或评论都会很棒,因为这对我和其他人来说都是学习进步。谢谢。
你可以试试这个:
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for ($x = 1; $x <= 10; $x++) {
foreach ($sequence as $sequence_value) {
$color_random = $color[array_rand($color)];
echo $color_random . "- " . $sequence_value . "- ";
}
}
每一对都是一个列表中的随机事物,再加上另一个列表中的下一个事物。您对随机事物列表很在行,但是在每个循环中您都需要弄清楚要使用序列列表中的哪个元素。
只有一个循环。
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for ($x = 1; $x <= 10; $x++) {
$color_random = $color[array_rand($color)];
$sequence_index = ????
$sequenceValue = $sequence[$sequence_index];
echo $color_random . "- " . $sequenceValue . "- ";
}
那么如何找到正确的序列索引呢?方法不止一种,但最简单的是模运算符。当 x = 1
时,您想要序列列表中的第一项(索引 0)。当x = 2
,你想要第二个。当x = 4
时,你想返回并再次获取索引0。
当你将两个整数相除时,Modulo 给你余数,所以它进入一个循环。 x % 3
将 几乎 给你你想要的。 (%
是 php 和许多其他语言中模运算符的符号)
要注意的是 1 % 3 = 1
所以当 x = 1 时你会得到索引 1(而不是期望的 0),而 3 % 3 = 0
所以当 x = 3 时你会得到索引 = 0 (而不是所需的 3)。序列与您想要的相差一个。
解决此问题的最简单方法是使 $x
从 0 - 9 而不是 1 - 10。如果 x 以 0 开头,则很好:
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for ($x = 0; $x <= 9; $x++) {
$color_random = $color[array_rand($color)];
$sequence_index = $x % 3;
$sequenceValue = $sequence[$sequence_index];
echo $color_random . "- " . $sequenceValue . "- ";
}
或者,如果出于某些其他原因必须从 $x
开始,您可以使用 $sequence_index = ($x - 1) % 3
。
为了让你的代码更能适应变化,最后一件事是调整以覆盖序列数组的长度变化:
$sequence_index = $x % count($sequence);
因此,如果您更改顺序,则不必记得也更新循环。
您不需要 2 个循环或嵌套循环来创建此序列,我更喜欢使用 %
使其 O(n)
共谋。
$color = array("green", "red", "yellow");
$sequence = array("R", "B", "B");
for($i = 0; $i < 10; $i++){
echo " {$color[array_rand($color)]} - {$sequence[$i%count($sequence)]} -";
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder
希望对您有所帮助