Php 如何使用';动态';来自其他多维数组的变量?

Php 如何使用';动态';来自其他多维数组的变量?,php,mysql,arrays,email,multidimensional-array,Php,Mysql,Arrays,Email,Multidimensional Array,我有一个mysql“客户端电子邮件”表,其中包含一个客户端ID和分配给它们的电子邮件地址,每个客户端可以有多个分配的电子邮件;而且客户端电子邮件表正在不断更新和添加,因此我没有设置客户端ID的列表 'client-emails' client_id | email ============ 27 | email1@client27domain 27 | email2@client27domain 42 | email1@client42domain 42 | email2@client42dom

我有一个mysql“客户端电子邮件”表,其中包含一个客户端ID和分配给它们的电子邮件地址,每个客户端可以有多个分配的电子邮件;而且客户端电子邮件表正在不断更新和添加,因此我没有设置客户端ID的列表

'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作业向这些客户发送电子邮件。这很好,但现在我们需要根据每个客户id对这些电子邮件进行个性化设置,因此我需要将每个客户的电子邮件分组,当电子邮件发送时,它知道每个客户id的“收件人”字段中有哪一组逗号分隔的电子邮件,以及电子邮件正文中提取客户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
不确定这是否是一个正确的开始,但我在下面的查询中使用了一个组\u 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',
   ),
 ),
)
我是否能够在该数组中循环,告诉my mail()中的$to变量为每个客户id向他们的每个内爆电子邮件发送单独的电子邮件

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

$to = (needs to emails per respective client ID);
$subject = "Client Details";
$message = "Your Client ID: " .  $clientID;
mail($to,$subject,$msg);
我可以得到$to变量的帮助来做我需要的事情吗?谢谢

更新:以下仅获取每个客户id的第一个电子邮件地址

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

不要使用分组讨论。它获取多条记录并将其折叠为单个值。它对结果字符串也有一个长度限制,并且会悄悄地截断任何超过该限制的内容,从而导致丢失数据和可能损坏的“最终”数据

只需使用常规查询:

SELECT id, email ...
然后使用循环:

$data = array();
while($row = ... fetch ...) {
    $data[$row['id']][] = $row['email'];
}
这将为您提供一个漂亮的ID和电子邮件地址的2D数组,而无需撤消任何加密或其他操作-您只需按原样开始使用地址,无需进一步处理:

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

不要使用分组讨论。它获取多条记录并将其折叠为单个值。它对结果字符串也有一个长度限制,并且会悄悄地截断任何超过该限制的内容,从而导致丢失数据和可能损坏的“最终”数据

只需使用常规查询:

SELECT id, email ...
然后使用循环:

$data = array();
while($row = ... fetch ...) {
    $data[$row['id']][] = $row['email'];
}
这将为您提供一个漂亮的ID和电子邮件地址的2D数组,而无需撤消任何加密或其他操作-您只需按原样开始使用地址,无需进一步处理:

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

你没有显示你的代码给客户发电子邮件,包括这一点,然后我们可以帮助你。谢谢,我已经更新了我的问题。目前,我只是在测试一个基本的邮件()函数。您没有向客户端显示您的代码,包括这些,我们可以帮助您。谢谢,我已经更新了我的问题。目前,我正在使用一个基本的邮件()函数进行测试。太棒了,非常感谢,您的代码正按照我的需要运行,但是$data=array()只返回每个客户端ID的第一封电子邮件。我在帖子底部添加了一个更新,显示了迄今为止我对array()的更新。再次感谢。请取出任何GROUPBY子句,除非您使用的是未显示的其他聚合函数。分组而不聚合将分组记录“折叠”为单个记录。天哪,就是这样!谢谢你今天的帮助!太棒了,非常感谢,您的代码正按照我的需要运行,但是$data=array()只返回每个客户ID的第一封电子邮件。我在帖子底部添加了一个更新,显示了迄今为止我对array()的更新。再次感谢。请取出任何GROUPBY子句,除非您使用的是未显示的其他聚合函数。分组而不聚合将分组记录“折叠”为单个记录。天哪,就是这样!谢谢你今天的帮助!