讀取一個 txt 文字檔案,裡面是一行一個 userid,需要給這些使用者傳送檔案(做什麼不重要),傳送檔案介面支援一次最多發 10 個使用者,所以需要分批傳送,每 10 個 userid 作為一批。
這種場景很常見,尤其是一次處理量太大了需要分批的情況。其實類似於如下例子,遍歷每個數字,每 5 個作為一組(這裡是 10 個):
1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 | 16 17 18
基本思想就是:遍歷的時候計數,取模可以知道是否滿足 10 個,每 10 個一傳送。但是要注意最後如果存在剩餘不足 10 個的情況不能漏了。程式碼如下:
$uidFile = storage_path('app/public') . DIRECTORY_SEPARATOR . $task['uid_file'];
$count = 0;
$max = 10;
//分批傳送
foreach (file($uidFile) as $line) {
$userID = intval($line);
if ($userID <= 0) {
continue;
}
$userIDs[] = $userID;
$count++;
if ($count % $max == 0) {
$this->sendMail($userIDs, $files, (string)$task['note'], (int)$task['reward'], $task);
$userIDs = [];
}
}
if ($userIDs) {
$this->sendMail($userIDs, $files, (string)$task['note'], (int)$task['reward'], $task);
}
省略上下文。
(隨手記錄一下程式碼片段,以備日後參考,原文地址:https://blog.tanteng.me/2017/10/php-foreac...)
本作品採用《CC 協議》,轉載必須註明作者和本文連結