Php 循环通过数据库获取详细信息,然后发送包含所述值的电子邮件

Php 循环通过数据库获取详细信息,然后发送包含所述值的电子邮件,php,mysql,arrays,email,Php,Mysql,Arrays,Email,我带来了由访客选择的小册子,他们可以选择多个小册子。三天后,他们将收到一封电子邮件,提醒他们选择的小册子 以下是我到目前为止的情况: $time_query = "SELECT * FROM users WHERE time < (now() - INTERVAL 1 minute)"; //" //GROUP BY time does group them into an array... well.. it doesnt display duplicate timestamps, so

我带来了由访客选择的小册子,他们可以选择多个小册子。三天后,他们将收到一封电子邮件,提醒他们选择的小册子

以下是我到目前为止的情况:

$time_query = "SELECT * FROM users WHERE time < (now() - INTERVAL 1 minute)"; //" //GROUP BY time does group them into an array... well.. it doesnt display duplicate timestamps, so assume it saves it to an array'";

    $time_query_result = mysql_query($time_query, $db) or 

    die("Could not execute sql: $time_query"); 

        $users = array();

        while($row = mysql_fetch_array($time_query_result)) {

            if (!array_key_exists($users[$row["id"]], $users)) {

                $users[$row["id"]] = array('email' => $row["email"], 'brochures' => array());
                $users[$row["id"]]["brochures"] = array('b' => $row["brochures"], 't' => $row["time"]);

            }

        }

        foreach ($users as $user) {

            $text = '<html><body><p>Brochure reminder</p>';
              $i = 0;

            foreach ($user["brochures"] as $brochure) {

                $text .= 'Brochures:<br />'.$i++ . $row["b"];
            }

            $text .= '</body></html>';
            mail($user["email"], $subject, $text, $headers);
        }
我通过电子邮件而不是宣传册上的名字来获取数字,我认为这与数组键的存在有关

每次用户选择一个小册子时,它都会在数据库中创建自己的行,其想法是通过时间列拉入用户一次选择的多个小册子,因为许多用户可以在一个时间段内选择小册子


任何帮助都将不胜感激:

在您的“while”循环中,您正在“users”数组中创建一个新的“brockhures”元素,而我认为您需要附加到它

if (!array_key_exists($row["id"], $users)) {
    $users[$row["id"]] = array('email' => $row["email"], 'brochures' => array());
}
$users[$row["id"]]["brochures"][] = array('b' => $row["brochures"], 't' => $row["time"]);
然后在“foreach”中,您需要使用宣传册变量:

foreach ($user["brochures"] as $brochure) {
    $text .= 'Brochures:<br />'.$i++ . $brochure["b"];
}

您当前的代码构建了一个用户数组,其中包含另一个索引为“宣传册”的数组。此数组将始终包含两个值

{
    'b' => $row["brochures"]
    't' => $row["time"])
}
关于这一事实,以下陈述毫无意义:

foreach ($user["brochures"] as $brochure) {

}
您所要做的就是使用索引“b”和“t”迭代这两个值。如果您想迭代一系列小册子,您需要调整代码

另一方面,你有几个重要的错误:

foreach ($user["brochures"] as $brochure) {
    $text .= 'Brochures:<br />'.$i++ . $row["b"];
}
你用这个大约三次。那么为什么不将其存储在变量$id中呢?使用索引访问数组比简单地访问变量成本更高


总的来说,我强烈建议您切换到面向对象的方法,这样您就可以摆脱这些丑陋的数组中的数组中的数组解决方案…

这已经改变了一些东西-现在电子邮件会为每封电子邮件返回不同的数字,但我仍然会为每本手册收到一封电子邮件,与一封包含所有选定手册的电子邮件不同:Thank Though我刚刚注意到,在您的while循环中,您每次都为手册创建一个新数组,而不是附加到该数组中。我还注意到,如果手册数组不存在,您只会添加到手册数组中。刚刚从“如果”中删除了那部分代码。是的,这已经奏效了!非常感谢。好它现在正确地显示所选手册的名称等。。。从数组中。现在唯一的问题是,它没有在一封电子邮件中收集所有的宣传册并发送一次。。。它会为每个选定的小册子发送一封电子邮件。。有什么想法吗?哦,那是因为你在使用array\u key\u存在于数组中的元素而不是key,我会编辑我的答案。
$text .= 'Brochures:<br />'.$i++ . $row["b"];
$row["id"]