PHP 遍歷元素並分批處理

紙牌屋弗蘭克發表於2017-11-06

讀取一個 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 協議》,轉載必須註明作者和本文連結

相關文章