【问题标题】:For loop in PHP: How to make a loop interval?PHP中的for循环:如何制作循环间隔?
【发布时间】:2017-04-20 04:50:53
【问题描述】:

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

我有 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);    
}

这就是我卡住的地方。如何正确执行此操作?

【问题讨论】:

  • 或循环播放
  • 与其拥有一个带有 if 语句的“主”循环,为什么不简单地为所需范围设置单独的循环?

标签: php codeigniter for-loop


【解决方案1】:

你应该在这里使用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/>';
    }
}

【讨论】:

  • 感谢您的回复。但在第一个数组 [0] 完成之前,它不应该转到另一个数组。我已经测试它一次加载了 1000 条记录。只是我需要 0-200 并保存一些数据,然后是数组 [1]
  • 对上面的 cmets 感到抱歉。它的运行完全符合我的预期,谢谢你们。 @Object Manipulation,@Nishant Nair,@Anushil Nandan
【解决方案2】:

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

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

基本上在这里你每次都调用$this-&gt;db-&gt;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

【讨论】:

    【解决方案3】:

    您可以使用array_splice。如果您需要以特定间隔发送数组,这是最好的选择。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多