【问题标题】:PHP: looping from 1 till 5 starting by 3PHP:从 3 开始从 1 循环到 5
【发布时间】:2012-09-15 23:45:21
【问题描述】:

我想从 1 循环到 5。如果你使用 for 循环这很容易:

for ($i=1; $i<=5; $i++)
{
 // do something
}

但是想象一下,我不是从 $i=1 开始,而是从 1 到 5 随机开始编号,这次它的值为 3。所以我必须从 3 开始循环,循环序列应该是:3,4, 5,1,2

我已经有了随机数,假设它是 3,那么我需要 3 4 5 1 2 .. 如果是 5,我将需要 5 1 2 3 4

我该怎么做?

非常感谢!

【问题讨论】:

    标签: php loops random for-loop


    【解决方案1】:

    你想从某个随机点(偏移量)开始,然后做一个 5 的循环:

    $offset = rand(1,5);
    for ($i=1; $i<=5; $i++)
    {
      echo (($i + $offset ) % 5) + 1;
    }
    

    【讨论】:

    • 3 是一个随机数,下次加载可能是 4 或 2 或 1 或 5
    • 您的系列将产生3, 4, 0, 1, 2
    • 我已经有了随机数,假设是 3,那么我需要 3 4 5 1 2 .. 如果是 5,我需要 5 1 2 3 4
    • 只需用你的随机数替换偏移量
    【解决方案2】:

    好吧,$i 将从1 迭代到5,这意味着您可以创建另一个变量$j,它等效于$i + 2,但当然它会导致计数:

    3, 4, 5, 6, 7
    

    取模运算符 (%) 出现在哪里,取模运算符给出除以第二个数后的余数:

    3 % 5 //3
    7 % 5 //2
    

    如果您从 1 迭代到 5 并添加 2 (3-7),并获取结果 mod(5),您会得到:

    方程:

    $j = ($i + 2) % 5
    
    3, 4, 0, 1, 2
    

    这与您想要的很接近,但并不完全。所以不是最初添加2,而是最初添加1,然后在模数结果之后再次添加:

    $j = $i;
    $j += 1;
    $j %= 5;
    $j += 1;
    //or in one line:
    $j = (($i + 1) % 5) + 1;
    

    这会给你一系列3, 4, 5, 1, 2

    要使用随机偏移量,只需确保初始填充在一组 5 个连续正整数中随机化:

    //this could be rand(0, 4) or rand(101, 105)
    //it doesn't actually matter which range of 5 integers
    //as the modulus operator will bound the results to the range of 0-4
    $offset = rand(1, 5);
    for ($i = 1; $i <= 5; $i++) {
        $j = (($i + $offset) % 5) + 1;
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

      for ($i = 0, $j = 3; $i < 5; $i++)
      {
         echo $j;
         $j %= 5;
         $j++;
      }
      

      你需要两个变量来做你想做的事。如果你设置 J = 3,它会做 3 4 5 1 2

      玩得开心。

      【讨论】:

      • 它打印 4 5 0 1 2 如果 $j= 3,我需要它打印 3 4 5 1 2
      • $j=3;它打印 3 4 5 6 2 这很好,因为它以 3 开头,但它显示 6 而不是 1
      【解决方案4】:

      一些(比我以前更好的)分步示例:

      首先,您希望有 5 个数字,这就是您进行循环的原因。这可以写成一个从 0 到 4 的计数器:

      for ($i = 0; $i < 5; $i++) { ...
      

      然后你指定你的起始值。如果你把它放入一个变量中并与计数器变量一起增加它,这可以让你从 1 数到 5:

      for ($i = 0, $j = 1; $i < 5; $i++, $j++) { ...
                   ^^^^^^                ^^^^
      

      这里$i 是计数器,$j 包含您要查找的值。

      如本例所示,确定要执行的步骤数的逻辑已与增加循环变量分开。

      现在您需要检查$j 是否高于 5,如果高于 5,则应将其重置为 1。但是,一个很好的方法是使用模运算符。这意味着,在增加$j 之前,它将被设置为自身除以5 的余数。这就是模运算,PHP 中的% 运算符:

      for ($i = 0, $j = 3; $i < 5; $i++, $j %= 5, $j++) { ...
                                         ^^^^^^^
      

      现在你已经有了你的for 循环,它正在创造价值。

      在此示例中,您可以将 3 替换为您的随机起始编号。注意它大于 0 小于 6,否则至少第一次迭代会给你一个错误的数字。

      您可以想象有多种方法可以做到这一点,所以这只是一个示例。

      【讨论】:

        【解决方案5】:
         $i = array(3,4,5,1,2); //considering you want to follow this order, and not random.
         foreach($i as $v) {
         //do something
         }
        

        【讨论】:

        • 这是硬编码的,我的意思是 3 是一个随机数,下一次加载它可能是 4 或 2 或 1 或 5 ..
        猜你喜欢
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        • 2014-05-05
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        • 2011-06-28
        相关资源
        最近更新 更多