我正在使用郵件列表。對多個數組執行多次的Foreach函數
我的郵件列表中有超過400個郵件,現在,所以我用foreach
。
我的問題是:我能否限制的foreach僅100封郵件?
EG - 發送電子郵件至第100封郵件,突破,然後從那裏開始停止。因此,例如,對於400封電子郵件,被稱爲4次的電子郵件發送到所有電子郵件。
foreach ($addresses as $to) {
mail($to,$subject,$message,$headers);
}
我需要做這樣的說法,因爲如果我立刻發送電子郵件給所有400個電子郵件,我得到503服務不可用。
我試過,但沒有工作...
$emailchunkarray = array_chunk($addresses, 50);
$arraysize = count ($emailchunkarray);
$x = 0;
function chunker() {
if ($x <= $arraysize) {
foreach ($emailchunkarray[$x] as $to) {
mail($to,$subject,$message,$headers);
}
$x++
$chunker2();
}
}
$chunker();
function chunker2() {
if ($x <= $arraysize) {
foreach ($emailchunkarray[$x] as $to){
mail($to,$subject,$message,$headers);
}
$x++;
$chunker();
}
}
出於某種原因,我不能回答我的問題......因此,這裏是我是如何做的:
$ChunkAddresses = 10;
$EmailChunkArray = array_chunk($Addresses, $ChunkAddresses);
$ArraySize = count ($EmailChunkArray);
$ChunkSize = 0;
$ForeachCounter = 0;
ChunkLoop: {
if ($GLOBALS["ChunkSize"] <= $GLOBALS["ArraySize"]) {
$EmailChunkArrayLoop = $GLOBALS["EmailChunkArray"];
foreach ($EmailChunkArrayLoop[$GLOBALS["ChunkSize"]] as $ToChunkLoop) {
mail($ToChunkLoop,$GLOBALS["Subject"],$GLOBALS["Message"],$GLOBALS["Headers"]);
$GLOBALS["ForeachCounter"]++;
if ($GLOBALS["ForeachCounter"] == $GLOBALS["ChunkAddresses"]) {
echo "This is the " . $GLOBALS["ChunkSize"] . " chunk.";
$GLOBALS["ForeachCounter"] = 0;
break 1;}
}
$GLOBALS["ChunkSize"]++;
sleep(3);
goto ChunkLoopFollow;} else if ($GLOBALS["ChunkSize"] == $GLOBALS["ArraySize"]){
exit();}
}
ChunkLoopFollow: {
if ($GLOBALS["ChunkSize"] <= $GLOBALS["ArraySize"]) {
$EmailChunkArrayLoopFollow = $GLOBALS["EmailChunkArray"];
foreach ($EmailChunkArrayLoopFollow[$GLOBALS["ChunkSize"]] as $ToChunkLoopFollow) {
mail($ToChunkLoopFollow,$GLOBALS["Subject"],$GLOBALS["Message"],$GLOBALS["Headers"]);
$GLOBALS["ForeachCounter"]++;
if ($GLOBALS["ForeachCounter"] == $GLOBALS["ChunkAddresses"]) {
echo "This is the " . $GLOBALS["ChunkSize"] . " chunk.";
$GLOBALS["ForeachCounter"] = 0;
break 1;}
}
$GLOBALS["ChunkSize"]++;
sleep(3);
goto ChunkLoop;} else if ($GLOBALS["ChunkSize"] == $GLOBALS["ArraySize"]){
exit();}
}
echo "Finished!";
化妝使用一個數據庫來跟蹤郵件已發送或需要發送。 –
在這種情況下使用'for'循環開始也許會更有意義? (但遞增foreach循環裏面一個櫃檯,檢查計數器,如果適用打破循環,當然不是火箭科學無論是。) – CBroe
使用任務調度和隊列,大塊的陣列等,大量的可能性。 – jeroen