【问题标题】:how to echo a populated php array如何回显填充的php数组
【发布时间】:2012-05-14 22:42:27
【问题描述】:

我有这个代码:

<?php 
$result_array1 = array();
$sql1 = "SELECT * FROM  `test_thing`";
$result1 = mysql_query("$sql1") or die($sql1.mysql_error());
while($row1 = mysql_fetch_array($result1))
    {
       $result_array1[] = $row1['email'];
    }
$sentmail = mail($result_array1,$subject,$message,$header);
?>

我的问题是,如果我将邮件功能放在循环中,用户会收到许多电子邮件而不是一封,如果我将它放在循环之外,则不会发送任何电子邮件。我的目标是只向每个用户发送一封电子邮件,但该电子邮件应该包含许多混合电子邮件。我在其他论坛上读到它可以使用数组来完成。也许代码有错误。 有什么建议吗?

谢谢

【问题讨论】:

  • 不应该是mysql_fetch_assoc而不是mysql_fetch_array吗?
  • @Shedal 可能是这样,但默认情况下 mysql_fetch_array() 获得 关联键和数字键,因此可以正常工作。

标签: php mysql arrays email loops


【解决方案1】:

试试这个

<?php 
$result_array1 = array();
$sql1 = "SELECT * FROM  `test_thing`";
$result1 = mysql_query("$sql1") or die($sql1.mysql_error());
while($row1 = mysql_fetch_array($result1))
    {
       $result_array1[] = $row1['email'];
    }
$email = implode(",",$result_array1); // $email = "one@example.com,two@example.com,three@example.com"
$sentmail = mail($email,$subject,$message,$header);
?>

mail 的第一个参数可以是单个电子邮件 ID 或以逗号分隔的电子邮件 ID。这意味着您只需使用一个函数调用就可以将电子邮件发送给多个用户。

【讨论】:

  • 有问题的是作者“我的目标是只向每个用户发送一封电子邮件”
  • @MoyedAnsari:它将向每个用户发送一封电子邮件
  • 如果查询返回两个完全相同的电子邮件地址怎么办?
  • @MoyedAnsari:你想证明什么?试着理解提问者的需要。不要做愚蠢的争论
  • 我的意思是 $result_array1 可能有两封相同的电子邮件,因为查询中没有不同的或分组依据。
【解决方案2】:

只需使用以下 MySQL 查询:

SELECT DISTINCT email FROM  `test_thing`

它将仅返回表中唯一的电子邮件地址。这样您就可以在循环中使用mail(),而不必担心重复的电子邮件地址。

【讨论】:

    【解决方案3】:

    根据php.net:http://php.net/manual/en/function.mail.php

    mail 接受一个字符串作为收件人地址。你总是可以implode(',', $result_array1)

    【讨论】:

      【解决方案4】:

      恕我直言,邮件功能中的 $to 参数仅支持一封电子邮件。如果您想发送到多个电子邮件,请更改您的 $headers 并设置 Bcc; 示例代码:

      $headers.="Bcc: "; 
      while($count < $count_recip){ 
      $headers.=$recip[$count].", "; 
      $count ++; 
      } 
      

      【讨论】:

        【解决方案5】:

        这对我有用:

        $result_array1 = array();
        $sql1 = "SELECT DISTINCT * FROM  `test_thing` GROUP BY `user_id`";
        $result1 = mysql_query("$sql1") or die($sql1.mysql_error());
        
        while($row1 = mysql_fetch_array($result1))
        {
            $result_array1[] = $row1['EmailAddress'];
        }
        
        $email = implode(",",$result_array1);
        

        我一起修改了一些答案。

        也不会有重复的电子邮件,至少我没有。

        【讨论】:

        • 如果您只使用结果集中的 EmailAddress,那么您可以只使用SELECT DISTINCT EmailAddress FROM ....,这将保证您不会收到重复的 EmailAddress 条目。
        猜你喜欢
        • 2018-09-26
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        相关资源
        最近更新 更多