Как бы я отправил электронное письмо одному из 4 человек, по порядку, один раз в неделю в 4-недельном цикле?

У меня есть массив из 4 адресов электронной почты. Каждый вторник мне нужно отправить электронное письмо, поэтому я использую CRON для запуска php-скрипта. Скрипт содержит массив адресов электронной почты. Неделя 1 Я отправляю электронное письмо в массив [0], неделя 2 Я отправляю электронное письмо в массив [1], неделя 3 Я отправляю электронное письмо в массив [2], а в неделю 4 я отправляю электронное письмо в массив [3]. Затем я повторяю, поэтому на пятой неделе я отправляю электронное письмо в массив [0] и так далее в бесконечность.

Как мне посчитать дату (), чтобы выяснить, какое письмо отправлять при запуске скрипта? Единственное, что я могу подумать, это заполнить массив поиска даты на следующие 10 лет после даты начала, а затем выполнить поиск, но это кажется неэффективным.

Бонусные баллы, если в следующем году я мог бы добавить еще одного пользователя в массив, не нарушая порядка на сегодняшний день.

0

Решение

Если я правильно понимаю, у вас нет проблем в когда отправить но кому, придерживаясь определенного порядка. Тем не менее, вы не ищете решение в неправильном районе?

Почему бы просто не сохранить номер индекса массива где-нибудь (например, в простом файле), которому вы отправили электронное письмо? И автоматически обновлять этот файл при выполнении cron (каждый вторник)? Это позволяет добавить другого пользователя без нарушения порядка.

Смотрите пример кода ниже:

// The list with users
$userList = [
0 => "you@domain.tld",
1 => "john.doe@domain.tld"];

// 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)
1

Другие решения

Вы можете использовать некоторые модульные математические операции для реализации простой системы циклического перебора.

Кроме того, вы можете получить номер недели, используя date("W")

Предполагая, что у вас есть только 3 массива:

<?php
$emails = [
['email1@corp.com', 'email2@corp.com', 'email3@corp.com'],
['email1@anothercorp.com', 'email2@anothercorp.com', 'email3@anothercorp.com'],
['email1@athirdcorp.com', 'email2@athirdcorp.com', 'email3@athirdcorp.com'],
];
$roundRobinSize = count($emails);
$thisWeekEmailsList = $emails[(intval(date("W")) - 1) % $roundRobinSize];
someFunctionForSendingMail($thisWeekEmailsList, 'Subject', 'Message');

Этот код может получить неправильный массив, если в итоге вы добавите другой список. Это потому, что реализован простой циклический перебор на основе номера недели.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector