2017-02-15 5 views
0

私は4つの電子メールアドレスの配列を持っています。毎週火曜日に私は電子メールを送信する必要があるので、私はCRONを使ってPHPスクリプトを実行します。スクリプトには電子メールアドレスの配列が含まれています。週1私は配列[0]、第2週に電子メールを送る配列[1]に電子メールを送る、第3週配列[2]に電子メールを送り、第4週に配列[3]に電子メールを送る。それから、私は5週目に配列[0]に電子メールを送ります。そして、無限に続きます。4人のうちの1人に、週に一度、4週間のサイクルで電子メールを送信するにはどうすればよいですか?

date()で数学を実行して、スクリプトの実行時に送信する電子メールを特定するにはどうすればよいですか?私が考えることができる唯一のことは、開始日の後の今後10年間の日付検索配列を記入し、次に検索を行うことですが、それは効率が悪いようです。

ボーナスポイントは来年には、注文を狂わせることなく別のユーザーを追加することができます。

+0

参照http://stackoverflow.com/questions/9567673/get-week-number-in-the-year-from-a-date-php – carebdayrvis

+0

'エコーdate( 'W');は現在の年の週番号を返します。後は君しだい。 – MonkeyZeus

答えて

1

私が正しく理解していればが特定の順序に付着し、に送るが、するとき、あなたはに問題はありません。それは間違った分野で解決策を探しているのですか?

電子メールを送信したアレイのインデックス番号(単純なファイルなど)を保存するだけではどうですか。 cronが実行されたときに自動的にそのファイルを更新します(毎週火曜日)?これにより、注文を狂わせることなく別のユーザーを追加することができます。

見る以下のコード例:

// The list with users 
$userList = [ 
    0 => "[email protected]", 
    1 => "[email protected]" 
]; 

// Determine the user who received last email 
$lastUsedIndex = 1; // e.g. extract this input from a file 

// Determine the last user in the list 
$maxUserIndex = max(0, count($userList) - 1); 

// Determine who is next in line to receive the email 
$newIndex = (++$lastUsedIndex <= $maxUserIndex ? $lastUsedIndex : 0); 
$reciever = $userList[$newIndex]; 

// Send the email 

// Update the source containing the last receiver (which is the value of $newIndex) 
+0

私はこの日に数学をすることにとても執着していましたが、この解決策は決して私には起こりませんでした。それを指摘してくれてありがとう。 –

+0

これを答えとして選択すると、ボーナスポイントも得られます。再度、感謝します。 –

1

モジュラ演算を使用すると、単純なラウンドロビンシステムを実装できます。最終的にはあなたが別のリストを追加した場合、このコードは間違った配列を取得することができます

<?php 
$emails = [ 
    ['[email protected]', '[email protected]', '[email protected]'], 
    ['[email protected]', '[email protected]', '[email protected]'], 
    ['[email protected]', '[email protected]', '[email protected]'], 
]; 
$roundRobinSize = count($emails); 
$thisWeekEmailsList = $emails[(intval(date("W")) - 1) % $roundRobinSize]; 
someFunctionForSendingMail($thisWeekEmailsList, 'Subject', 'Message'); 

また、あなたはわずか3つの配列を持っていると仮定するとdate("W")

を使用して週番号を取得することができます。これは、週番号に基づいて単純なラウンドロビンが実装されているためです。

+0

このソリューションをありがとう。 –

関連する問題