2016-08-29 2 views
0

У меня есть таблица «клиент-электронная почта» mysql, которая содержит идентификатор клиента и адреса электронной почты, которые им назначены, каждый клиент может иметь несколько назначенных писем; и таблица клиент-электронная почта постоянно обновляется и добавляется, поэтому у меня нет набора списка client_ids.Как использовать динамическую переменную из многомерного массива в другом месте?

'client-emails' 
client_id | email 
============ 
27 | [email protected] 
27 | [email protected] 
42 | [email protected] 
42 | [email protected] 
42 | [email protected] 
46 | [email protected] 

У меня есть PHP-скрипт электронной почты, который каждую ночь отправляет электронное письмо этим клиентам с помощью задания cron. Это хорошо работает, но теперь нам нужно персонализировать эти письма на клиентский_ид, поэтому мне нужно разделить каждую группу клиентов на каждый клиент, и когда он отправит электронное письмо, он знает, какая группа разделенных запятыми электронных писем должна быть в папке " «Поле» на клиентский_ид и переменную в теле письма, которая вытаскивает идентификатор клиента.

To: $clientEmails 
and within the message there'll be a "Your ID is: $clientId". 

i.e., 
To: [email protected],[email protected] 
And in the message will be: 
Your ID is: 27 

Не уверен, если это правильный старт, но я играл с GROUP_CONCAT в поле ниже запроса:

$sql = "SELECT client_id, GROUP_CONCAT(email) AS emails FROM portal_client_report_emails GROUP BY client_id ORDER BY client_id ASC"; 

И делает:

$grouped = array(); 
foreach ($rows as $item) { 
$grouped[$item['client_id']][] = $item; 
} 

Сплин из:

array (
27 => 
array (
    0 => 
    array (
    'client_id' => '27', 
    'emails' => '[email protected],[email protected]', 
    ), 
), 
42 => 
array (
    0 => 
    array (
    'client_id' => '42', 
    'emails' => '[email protected],[email protected],[email protected]', 
    ), 
), 
46 => 
array (
    0 => 
    array (
    'client_id' => '46', 
    'emails' => '[email protected]', 
    ), 
), 
) 

Могу ли я грубо говоря, что массив, чтобы сообщить my $ переменной в моей почте(), отправить отдельное письмо для каждого client_id для каждого из их взорванных писем?

Для моей почты тестирования, я в настоящее время только с помощью основной функции почта():

$to = (needs to emails per respective client ID); 
$subject = "Client Details"; 
$message = "Your Client ID: " . $clientID; 
mail($to,$subject,$msg); 

Могу ли я получить помощь, пожалуйста, с $ к переменной, чтобы делать то, что я нуждаясь? Благодаря!

Обновление: ниже доступно только первый адрес электронной почты для client_id.

"SELECT client_id,email..."; 
$data = array(); 
while($row = mysqli_fetch_array($rows)){ 
    $data[$row['client_id']][] = $row['email']; 
} 
+0

Ваш код не отображается электронной почты клиентов, включите, что тогда мы можем вам помочь. – cmorrissey

+0

Спасибо, я обновил свой вопрос. В настоящее время я просто тестирую базовую базовую функцию mail(). – hominid4

ответ

2

Не используйте group_concat. Это занимает несколько записей и сворачивает его в значение SINGLE. Он также имеет ограничение по длине в полученной строке, и WILL тихо усекает все, что превышает лимит, оставляя вам недостающие данные и, возможно, поврежденный «окончательный».

Просто используйте обычный запрос:

SELECT id, email ... 

затем использовать цикл:

$data = array(); 
while($row = ... fetch ...) { 
    $data[$row['id']][] = $row['email']; 
} 

Это даст вам хороший 2D массив идентификаторов и адресов электронной почты, без каких-либо UNDO concatting или что-то еще - вы только начинаете использовать адреса как есть, дальнейшая обработка не требуется:

foreach($data as $id => $addresses) { 
    foreach($addresses as $addr) { 
      send("Hi, $addr, your id is $id"); 
    } 
} 
+0

Удивительный, благодаря связке, ваш код работает так, как мне нужно, но $ data = array() возвращает только первое письмо на идентификатор клиента. Я добавил обновление в нижней части моего сообщения, показывая, что у меня есть до сих пор для массива(). Еще раз спасибо. – hominid4

+0

вынимайте любые предложения group-by, если вы не используете другие агрегированные функции, которые не отображаются. группировка без агрегации «сворачивает» сгруппированные записи в одну. –

+0

Geez, вот и все! Спасибо за вашу помощь сегодня! – hominid4

Смежные вопросы