我正在尋找正確的邏輯環通的記錄,並觸發一個事件每個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