Вставьте переменную строки в массив

Я использую Sendinblue SMTP в своем проекте PHP и хочу отправлять транзакционные электронные письма в динамический список электронных писем, проблема в том, что у меня возникает синтаксическая ошибка, когда я использую переменную вместо строки. Например, этот код прекрасно работает:

    include 'Mailin.php';
    $mailin = new Mailin('senders@sender.com', 'key');
    $mailin->
    addTo(
        array(
                 'email1@email.com' => '', 'email2@email.com' => '', 'email3@email.com' => ''
            )
    )->

    setFrom('sender@sender.com', 'Test')->
    setReplyTo('sender@sender.com', 'Test')->
    setSubject('Example')->
    setText('Test')->
    setHtml($htmlContent);
    $res = $mailin->send();
    print_r($res);

Но если я использую переменную вместо Strings в "addTo Array", это показывает синтаксическую ошибку, например:

    $customers = '';
    foreach ($clientes as $customer) {

        for ($i=1; $i < 41; $i++) { 

            if ($customer['email'.$i]  != "" or $customer['email'.$i] != NULL) {

                $customers .= "'".$customer['email'.$i]. "' => '', " ; //for each customer's email add the email in " 'email@email.com' => '', " format
            }
        }
    }

    $customers = substr($customers, 0, -2); //removes last space and comma of the String

    include 'Mailin.php';
    $mailin = new Mailin('senders@sender.com', 'key');
    $mailin->
    addTo(
        array(
                 $customers
            )
    )->

    setFrom('sender@sender.com', 'Test')->
    setReplyTo('sender@sender.com', 'Test')->
    setSubject('Example')->
    setText('Test')->
    setHtml($htmlContent);
    $res = $mailin->send();
    print_r($res);

Если я использую функцию Print_r ($ Customers), она показывает точную строку, которую я использовал в моем первом примере, даже если я использую код:

    $text = "'email1@email.com' => '', 'email2@email.com' => '', 'email3@email.com' => ''";

    if ($customers == $text) {
        print_r("Yes");
    }else{
        print_r("No");
    }

Результат "Да", но когда я использую переменную в

    addTo(
        array(
                 $customers
            )
    )->

показывает ошибку, но если я использую строку непосредственно, электронное письмо отправляется

    addTo(
        array(
                 'email1@email.com' => '', 'email2@email.com' => '', 'email3@email.com' => ''
            )
    )->

И я не знаю, почему он показывает ошибку, если переменная $ Customers содержит нужную строку.

Вы знаете, как использовать переменную с электронными письмами, которые мне нужно отправить?

1 ответ

Решение

Вы не строите массив путем объединения строк с => в них. Чтобы создать элемент в ассоциативном массиве, просто присвойте этому индексу массива.

$customers = [];
foreach ($customers as $customer) {
    for ($i = 1; $i < 41; $i++) {
        if (!empty($customer["email" . $i])) {
            $customers[$customer["email" . $i]] = "";
        }
    }
}
include 'Mailin.php';
$mailin = new Mailin('senders@sender.com', 'key');
$mailin->
addTo($customers)->
...

Также см. Почему проверка неравенства одной переменной по многим значениям всегда возвращает true? почему вы должны были использовать && скорее, чем || когда вы пропускали пустые электронные письма (которые я упростила с помощью !empty()).

Другие вопросы по тегам