Для цикла в 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);