2017-11-22 6 views
0

foreachループを中断したいと思います。 50回のループを行い、「50個のメールが送信された」というメッセージを表示してから、次の50分間foreachを続行し、メッセージをもう一度表示し、続けるなど...foreachのリミット番号は、メッセージを表示するために反復しています。

これを行う方法はありますか?

マイループ:あなたの意図を1として

  $i = 0; 
      foreach ($users as $user) { 

      if(!in_array($user->getEmail(), $receivers)){ 
      $recipient = $user->getEmail(); 
      $this->get('MailerHelper')->sendMessage('..,$recipient,..'); 
      } 

      $i++; 
      if($i % 50 == 0){ 
      printf('50 Emails sent.'); 
      } 
      } 
+1

あなたのインデントを修正してください。それはあなたの質問をより読みやすくします。 –

+0

申し訳ありません、あなたは正しいです – sonja

+1

ループ内で変数を作成して、 '$ i'のような反復を数え、ループ内で' $ i ++ 'を実行してください。ループの中で、 '$ i%50 == 0'のif文を書くことができます(つまり、$ iは50で割り切れます)。ループから脱出する必要はありません。 –

答えて

-1

、if文を使用して破ります。

If(condition) { 
    Statement 
    Break; 
} 
+0

ok、そして彼らはループから壊れた後、どのようにして '次の50のためにforeachを続行し、再びメッセージを表示し、続けるなど... '質問を読む。 –

0

私が正しくあなたを理解していれば - あなたはほとんどあります

  1. あなたは、明示的な増分変数を必要としない - foreachのは、すでに利用可能なそのキーを持っています。
  2. 初期モジュラスTRUE(最初の反復)をスキップしたい場合は、起動していないときにXメールを送信したことを表示します。
$users = ['Jim', 'Bob', 'Fred', 'Shane', 'Chris', 'Larry', 'John']; 

$batchTotal = 3; 

foreach ($users as $index => $user) { 
    if (!in_array($user->getEmail(), $receivers)) { 
     $recipient = $user->getEmail(); 
     $this->get('MailerHelper')->sendMessage('..,$recipient,..'); 
    } 

    // NOTE: $index > 0 skips first modulus test when $index == 0 
    if ($index > 0 && ($index % $batchTotal == 0)) { 
     printf("$batchTotal Emails sent.\n"); 
    } 
} 

私はBLOCKQUOTE、コードブロックにコード例をダンプしなければならなかった - 適切にそうでない場合は、コードをハイライト表示しません。

アレックス

関連する問題