【问题标题】:How to execute FOR loop in PHP for several ranges如何在 PHP 中为多个范围执行 FOR 循环
【发布时间】:2021-09-02 18:47:33
【问题描述】:

当我尝试使用 PHP 和 SQL 从大型 API 捕获数据时,它只给我前 20 行数据。因此,我必须在 PHP 中为每 20 行分别运行“FOR”循环以获取所有行。假设我们总共有 100 行。 我正在运行的代码如下所示:

for ($i = 0; $i< 20; $i++){
 echo "The number is: $i <br>";
}

但我希望它分别运行 20-40 、 40-60 、 60-80 、 80-100。

有没有像下面这样的解决方案?!

$value1 = Array(0,20,40,60,80)
$value2 = Array(20,40,60,80,100)
for ($i = $value1; $i< $value2; $i++){
 echo "The number is: $i <br>";
}

更新: 最后,我需要像[0,1,2,...,18,19],[20,21,22,...,38,39].[40,41,...],...,[...99,100] 这样捕获所有 100 行。所以我可以将所有数据行存储在 MySQL 数据库中。正如我所说,当我一次运行所有 100 行时,它只给我前 20 行,因为 API 限制,我猜。谢谢

【问题讨论】:

  • 只有在有更多记录时运行的外部while 循环,并在内部循环中使用$base += 20;$base+$i
  • for ($i = 0; $i &lt; 100; $i += 20)

标签: php


【解决方案1】:

有没有像下面这样的解决方案?!

您的解决方案将进入无限循环。


基于OP's comment,我重构了我的答案。

我会使用:

  • do...while 循环直到你得到所有行
  • 一个内部 for 循环遍历每一行

以下脚本将显示每个0-100 并分隔每个20

那些(skip) 表示我已经手动删除了一部分输出以减小大小。

<?php

$rows = 100;
$part = 20;
$amountRetrieved = 0;

// Outer loop
do {

    // Get data
    echo "Get rows; $amountRetrieved <--> " . ($amountRetrieved + $part) . PHP_EOL;

    // Inner loop
    for ($i = 0; $i < $part; $i++) {
        
        // Show inner loop value
        echo "Inner: " . ($amountRetrieved + $i) . PHP_EOL;
    }  

    // Bump counter  
    $amountRetrieved += $part;

} while ($amountRetrieved < $rows);
Get rows; 0 <--> 20
Inner: 0
Inner: 1
(skip)
Inner: 17
Inner: 18
Inner: 19
Get rows; 20 <--> 40
Inner: 20
Inner: 21
(skip)
Inner: 37
Inner: 38
Inner: 39
Get rows; 40 <--> 60
Inner: 40
Inner: 41
(skip)

Try it online!

【讨论】:

  • 谢谢 0Stone0,但我正在寻找类似:{0,1,2,3,...,19,},{20,21,22,..., 29},... .
  • 非常感谢您的朋友。它发挥了魔力。
【解决方案2】:

这是另一种方式

$max_values = 100;
$max_row = 20;
$i = 0;
$j = 0;

while( ( $j*max_row + $i) < $max_values ) ){    
  for ($i = 0; $i < $max_row; $i++){
    $row = $j*max_row + $i;
    echo 'Row is: '.$row;
  }
  $j++;
}

【讨论】:

    【解决方案3】:

    希望能解决你的问题

    $repeat = 4;
    $times = 1;
    $num = 0;
    while($times <= $repeat){
        $times += 1;
        $num += 20;
        for ($num; $i<($num + 20); $i++){
            //do something
            echo "I'm number: " . $i . "\n";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多