PHP-循环通过记录集和每n行触发事件
我正在寻找正确的逻辑来循环一个记录集,并每n次触发一个事件 在谷歌上搜索时,我发现了一些类似情况的讨论,但似乎解决方案不符合我的需要 我需要将我的应用程序与使用minOccurs=“0”maxOccurs=“4”的Web服务连接起来,以便在单个调用中使用可重复元素。假设我有一个22行的记录集 我需要:PHP-循环通过记录集和每n行触发事件,php,loops,for-loop,foreach,recordset,Php,Loops,For Loop,Foreach,Recordset,我正在寻找正确的逻辑来循环一个记录集,并每n次触发一个事件 在谷歌上搜索时,我发现了一些类似情况的讨论,但似乎解决方案不符合我的需要 我需要将我的应用程序与使用minOccurs=“0”maxOccurs=“4”的Web服务连接起来,以便在单个调用中使用可重复元素。假设我有一个22行的记录集 我需要: 循环遍历记录集,并用每行填充数组$数据 在第4行(第8、12、16…)触发事件(使用4个元素的$data调用WS) 清空$data并继续循环到下一个第4个 如果行数不是4的倍数,我必须处理剩余的行
if($i%4==0)
,我得到事件每4行触发,但22它不是4的倍数,因此事件将被触发到第20行,然后不触发。也许我需要对“多余”行进行除法计算
由于记录集将在50到200行之间,我认为没有必要运行4行的多个查询,我错了吗
提前谢谢
更新:
在下面答案的启发下,我终于成功地完成了我想要的脚本工作。。。可能这不是一个优雅的解决方案,但效果与预期一致:
$result = $query->result(); // the recordset
$total_rows = count($result);
$interleave = 4;
$reminder = $total_rows % $interleave;
$round_rows = ($total_rows-$reminder)+1; // +1 because $i dont start at zero
$data = array();
从初始循环开始($round_rows是4的倍数)
用于($i=1;$ifire\u事件($data);
$data=array();
}
}
然后,如果有提醒,循环通过
if ($total_rows % $interleave !== 0){
for ($i = $round_rows; $i < $total_rows + 1; $i++) {
$data[$i] = $result[$i];
}
$this->fire_event($data);
}
if($total_rows%$interleave!==0){
对于($i=$round\u rows;$i<$total\u rows+1;$i++){
$data[$i]=$result[$i];
}
$this->fire_事件($data);
}
欢迎提供任何建议!如果您需要在记录集末尾触发事件,只需执行即可
for($i=0 .... ) {
// do yourcalculation
}
//fire your event for the end of the recordset
如果仅在上次触发事件后有备用记录时才需要触发事件,请使用If
$interleave = 4; // or whaterver you interval you need
for($i=0 .... ) {
// do yourcalculation
}
if (!($i % $interleave)) {
// fire your event
}
$i
索引在循环结束后继续有效,您可以利用此语言属性您找到了正确的方法。如果它达到22,为什么要在21和22中触发?如果您想要“事件”要每4行发射一次,你为什么要在第22行发射一次?还有,事件是什么?你在计算什么吗?为什么要在第22行发射一次?如果它不能被4整除,你为什么要在最后一行发射一次?我感觉你想这样做。下面@Eineki的答案是正确的。你需要做的就是发射一次循环结束时的事件(完全在循环外)(无论什么){blah}fire_my_event();
$interleave = 4; // or whaterver you interval you need
for($i=0 .... ) {
// do yourcalculation
}
if (!($i % $interleave)) {
// fire your event
}