如何在 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

希望对您有所帮助