我正在寻找正确的逻辑环通的记录,并触发一个事件每个n次。PHP - 环通记录和火灾事件每个n行
搜索在谷歌我已经发现了类似的情况下,一些讨论,但似乎解决方案不符合我的需求。
我需要的接口我的应用与使用的minOccurs =“0” maxOccurs的=“4”用于在单个呼叫重复元件一个web服务。假设我有22行的记录集。
我需要:
- 环通的记录,并与各行
- 第4行(8日,12日,16日......)触发事件填充数组$的数据(也称WS与$ 4个的元素数据)
- 空$数据和循环,直到下一个4
- 继续,如果行的数量不是4的倍数我必须处理剩余部分,且火灾最后一个电话
使用answer,if($i % 4 == 0)
所示的模运算符,我得到每4行触发的事件,但22不是4的倍数,所以事件被触发,直到第20行,然后什么也没有。也许我需要在“过剩”中对行进行计数?
由于记录将是50,行与行200我认为的4排它没有必要运行多个查询,我错了?
在此先感谢!
UPDATE: 由下面我的答案启发终于成功地拿到剧本的工作,因为我想...也许它不是一个完美的解决方案,但按预期工作:
$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的倍数)
for ($i=1; $i<$round_rows; $i++){
$data[$i] = $result[$i];
if ($i % $interleave == 0){
$this->fire_event($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);
}
欢迎任何建议!
您找到了正确的方法。如果它达到22,为什么它应该在21和22时发射? – aletzo 2012-03-28 17:31:29
如果你想让一个“事件”每4行触发一次,你为什么还想让它在第22行上触发?此外,事件是什么?你在计算什么? – 2012-03-28 17:31:42
为什么你想让它在第22行开火? – 2012-03-28 17:32:22