代码之家  ›  专栏  ›  技术社区  ›  Teik Fai

如何在PHP中的for循环中实现foreach?

  •  0
  • Teik Fai  · 技术社区  · 3 年前

    我对PHP&堆栈溢出。如果我在这里出错,请纠正我的问题。 我在这里的目标是得到一个随机颜色(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——” .

    如何将其转换/更改为 黄色-R-绿色-B-黄色-B-红色-R-绿色-B-绿色-B-红色-R-绿色-B-黄色-B-绿色-R- (随机颜色-序列-) 如您所见,生成了10种随机颜色,但顺序如下所示。

    任何答案或评论都会很好,因为这对我和其他人来说都是学习的进步。非常感谢。

    1 回复  |  直到 3 年前
        1
  •  0
  •   Mahmudul Hasan    3 年前

    你可以试试这个:

    $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 . "- ";
    }
    }
    
        2
  •  0
  •   Jerry    3 年前

    每一对都是一个列表中的随机项,再加上另一个列表中的下一项。你对随机事物列表很在行,但是在每个循环中,你需要弄清楚序列列表中的哪个元素要使用。

    只有一个循环。

    $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。

    当你除以两个整数时,模给你余数,所以它是一个循环。 x % 3 几乎 给你想要的。( % 是php和许多其他语言中模运算符的符号)

    问题是 1 % 3 = 1 因此,当x=1(而不是期望的0)时,您将得到索引1,并且 3 % 3 = 0 ,因此当x=3时,您将得到index=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美元 由于其他原因,在1时,您可以使用 $sequence_index = ($x - 1) % 3 .

    为了使代码更能适应变化,最后一件事是调整以适应序列数组长度的变化:

    $sequence_index = $x % count($sequence);
    

    所以,如果你改变了序列,你就不必记得也要更新循环。

        3
  •  0
  •   Ahmed Hassan    3 年前

    你不需要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

    我希望这会有帮助