Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每个循环的限制和偏移_Php - Fatal编程技术网

Php 每个循环的限制和偏移

Php 每个循环的限制和偏移,php,Php,假设我想循环遍历XML节点,但我想忽略前10个,然后将我获取的数量限制为10 $limit=10; //define results limit $o=20; //define offset $i=0; //start line counter foreach($xml->id AS $key => $value){ $i++; if($i > $o){ //if line number is less than offset, do nothing.

假设我想循环遍历XML节点,但我想忽略前10个,然后将我获取的数量限制为10

$limit=10; //define results limit
$o=20; //define offset
$i=0; //start line counter

foreach($xml->id AS $key => $value){
    $i++;
    if($i > $o){
    //if line number is less than offset, do nothing.
    }else{ 
    if($i == "$limit"){break;} //if line is over limit, break out of loop
    //do stuff here
    }
}

所以在这个例子中,我想从结果20开始,只显示10个结果,然后打破循环。但它不起作用。有什么想法吗?

里面有多个bug。应该是

foreach (...
    if ($i++ < $o) continue;
    if ($i > $o + $limit) break;
    // do your stuff here
}
foreach(。。。
如果($i++<$o)继续;
如果($i>$o+$limit)中断;
//在这里做你的事
}
您应该使用在$o

之前达到$limit的原因。您可以对元素数组使用next()函数:

$limit=10; //define results limit
$o=20; //define offset
$i=0; //start line counter

for ($j = 0; $j < $o; $j++) {
  next($xml->id);
}

foreach($xml->id AS $key => $value){
        $i++;
        if($i > $o){
        //if line number is less than offset, do nothing.
        }else{ 
        if($i == "$limit"){break;} //if line is over limit, break out of loop
        //do stuff here
        }
}
$limit=10;//定义结果限制
$o=20;//定义偏移量
$i=0;//起始行计数器
对于($j=0;$j<$o;$j++){
接下来($xml->id);
}
foreach($xml->id作为$key=>$value){
$i++;
如果($i>$o){
//如果行号小于偏移量,则不执行任何操作。
}否则{
若($i==“$limit”){break;}//若行超出限制,则中断循环
//在这里做事
}
}

关于next()函数的更多信息:

来自soulmerge的答案将在循环中重复一次。它应该是:

foreach (...
    if ($i++ < $o) continue;
    if ($i >= $o + $limit) break;
    // do your stuff here
}
foreach(。。。
如果($i++<$o)继续;
如果($i>=$o+$limit)中断;
//在这里做你的事
}

请看这里:这更适合作为soulmerge答案下的注释,而不是自己的答案。这不是真的。因为他在前面的if中做了
$i++
,所以你必须使用严格的上级,否则你会得到
$limit-1
结果,而不是
$limit
结果。
foreach (...
    if ($i++ < $o) continue;
    if ($i >= $o + $limit) break;
    // do your stuff here
}