我正在尝试制作一个循环。像这样:
我有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);
}
这是我被困的地方。我该如何正确执行?
答案 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);