如何使用'dynamic'变量从其他地方的多维数组


How to use 'dynamic' variable from multidimensional array elsewhere?

我有一个mysql ' Client -email '表,其中包含一个客户端ID和分配给这些的电子邮件地址,每个客户端可以有几个分配的电子邮件;并且client-email表不断更新和添加,所以我没有一个client_ids的集合列表。

'client-emails'
client_id | email
============
27 | email1@client27domain
27 | email2@client27domain
42 | email1@client42domain
42 | email2@client42domain
42 | email3@client42domain
46 | email1@client46domain

我有一个电子邮件PHP脚本,每天晚上使用cron作业向这些客户端发送电子邮件。这工作得很好,但现在我们需要个性化每个client_id的这些电子邮件,所以我需要拆分每个客户端电子邮件的每个客户端组,当电子邮件发送它知道哪组逗号分隔的电子邮件有在每个client_id的"to"字段,并在电子邮件正文中的一个变量拉客户端ID。

To: $clientEmails
and within the message there'll be a "Your ID is: $clientId".
i.e.,
To: email1@client27domain,email2@client27domain
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' => 'email1@client27domain,email2@client27domain',
   ),
 ),
 42 =>
 array (
   0 =>
   array (
     'client_id' => '42',
     'emails' => 'email1@client42domain,email2@client42domain,email3@client42domain',
   ),
 ),
 46 =>
 array (
   0 =>
   array (
     'client_id' => '46',
     'emails' => 'email1@client46domain',
   ),
 ),
)

我是否能够通过该数组循环告诉我的$to变量在我的mail()发送一个单独的电子邮件为每个client_id他们的每个内爆电子邮件?

对于我的邮件测试,我目前只是使用一个基本的mail()函数:

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

我可以得到$to变量的帮助来做我需要的事情吗?谢谢!

更新:下面只抓取每个client_id的第一个电子邮件地址。

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

不要使用group_concat。它接受多个记录并将其折叠成单个值。它对结果字符串也有长度限制,并且会静默地截断超过限制的任何内容,从而留下丢失的数据和可能损坏的"最终"数据。

使用常规查询:

SELECT id, email ...

则使用循环:

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

这将给你一个漂亮的二维数组的id和电子邮件地址,而不必撤销任何连接或其他-你只是开始使用地址,不需要进一步的处理:

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