对于PHP中的循环:如何进行循环间隔?

时间:2017-04-20 04:50:53

标签: php codeigniter for-loop

我正在尝试制作一个循环。像这样:

我有1000条记录。在这1000条记录中,它应该

  
      
  • 前200
  •   
  • 然后201-400
  •   
  • 然后401-600
  •   
  • 然后600-800
  •   
  • 然后801-1000
  •   

这是我的代码:

for($i=1; $i<=1000; $i++){
if($i > 200){
//$this->db->save(); //save some data
break;
}

echo $i."<br>";

if($i == 200){
  for($i=201; $i<=400; $i++) {
  //$this->db->save();  //save some data
  echo $i."<br>";
   }
}

if($i == 400) {
  for($i=401; $i<=600; $i++){
     echo $i."<br>";
   }
 }

第2部分:

$totalClientCount = 1000;      

$input_array    =    range(1, $totalClientCount);
$chunks         =    array_chunk($input_array, 200);

foreach ($chunks as $k => $chunk) { 

if ($k == 0) {  // 0-200
  $this->db->where('AccountNo', $id);
  //$this->db->limit($offset,$limit);
  $getClientDetails = $this->db->get('table');
  echo '<pre>';
  print_r($getClientDetails);    
}

这是我被困的地方。我该如何正确执行?

3 个答案:

答案 0 :(得分:2)

您应该在这里使用array_chunk() 。让我展示一个包含100个条目的示例,其中前20个,21-40个,41-60个等等。

$input_array    =    range(1, 100);
$chunks         =    array_chunk($input_array, 20);

这是$ chunks数组的样子:

Array
(
   [0] => Array
    (
        [0] => 1
        [1] => 2
        ......
        [9] => 10
     ),
  [1] => Array
    (
        [0] => 21
        [1] => 22
        .......
        [2] => 40
     )
     .........
     .........
   [4] => Array
      (
        [0] => 81
        [1] => 82
        ......
        [19] => 100 
   )

现在遍历你的$ chunks数组。

foreach ($chunks as $k => $chunk) {
    /* $k = 0 means first 20 items */
    if ($k == 0) {
        // your code here
    }
    foreach ($chunk as $i) {
        echo $i;
        echo '<br/>';
    }
}

答案 1 :(得分:1)

如果您在给定范围[200]之后执行某项任务,您可以使用:

$range = 200;
for($i=1; $i<=1000; $i++){
  //$this->db->save();
  if ($i%$range == 0) {
    //...
  }
}

基本上你每次都在调用$this->db->save(),直到循环结束,只使用201,401,601,801来做其他事情,比如打印$i的当前值

如果您想在每个范围之后执行单独的任务:

$range = 200;
$fn = 0;
for($i=1; $i<=1000; $i++){
  $functionToCall = 'fn_'.$fn;
  $functionToCall();
  if ($i%$range == 0) {
    $fn = $i+1;
  }
}

function fn_0()
{
  //...
}

function fn_201()
{
  //...
}

function fn_401()
{
  //...
}

function fn_601()
{
  //...
}

function fn_801()
{
  //...
}

将逻辑上的功能分开是一种很好的做法。

此外,如果您只需要保存1000次,请不要使用循环插入。请尝试批量插入,例如insert multiple rows via a php array into mysql

答案 2 :(得分:0)

您可以使用array_splice。如果需要以特定间隔发送数组,则最佳选择。

我已在我的代码中实现了它,一次发送1000个ID的通知。

$sendIds = array_splice($your_array,0,199);