Для цикла в PHP: Как сделать интервал цикла?

Я пытаюсь сделать петлю. Что-то вроде этого:

У меня 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 ответа

Решение

Вы должны использовать 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/>';
    }
}

Если вы выполняете какую-либо задачу даже после заданного диапазона [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 раз, не используйте цикл для вставки. Вместо этого попробуйте пакетную вставку, что-то вроде вставки нескольких строк через массив php в mysql.

Ты можешь использовать array_splice, Если вам нужно отправить массив с определенным интервалом, это лучший вариант.

Я реализовал это в своем коде для отправки уведомлений на 1000 идентификаторов одновременно.

$sendIds = array_splice($your_array,0,199);
Другие вопросы по тегам