我如何正确地创建一个PHP数组,以便稍后循环并获取每一条信息?
我有一个mysql表,其中有许多用户(姓名、电子邮件和通知,如果他们需要电子邮件通知,则为是;如果他们不需要,则为否) 我想查询需要通知的人的所有姓名/电子邮件/用户名(即notify='yes'),并将它们放入一个数组中供以后使用我如何正确地创建一个PHP数组,以便稍后循环并获取每一条信息?,php,mysql,arrays,email,phpmailer,Php,Mysql,Arrays,Email,Phpmailer,我有一个mysql表,其中有许多用户(姓名、电子邮件和通知,如果他们需要电子邮件通知,则为是;如果他们不需要,则为否) 我想查询需要通知的人的所有姓名/电子邮件/用户名(即notify='yes'),并将它们放入一个数组中供以后使用 $sql = "SELECT userid, firstname, lastname, email, notify FROM users WHERE notify = 'yes'"; $getnotify = mysqli_query($connec
$sql = "SELECT userid, firstname, lastname, email, notify FROM users
WHERE notify = 'yes'";
$getnotify = mysqli_query($connection, $sql);
if (!$getnotify) {
die("Database query failed: " . mysqli_error());
} else {
while ($row = mysqli_fetch_assoc($getnotify)) {
//get emails, add comma after if necessary
$notifyemailsarray[$row['email']]=$row['firstname']." ".$row['lastname']. " " . $row['userid'];
}
}
它的工作原理和输出如下:
Array
(
[jj@gmail.com] => John Jones 331322
[billw@yahoo.com] => Bill Wilson 331323
[kenny896@gmail.com] => Kenny Smith 331347
[gl222@hotmail.com] => Greg Lawson 331331
[chrisc1987@gmail.com] => Chris Connors 331325
)
两个问题
请注意,在正文中,我显示了它们的名称(使用$name)。那很好。但我还想列出他们的userid,在这里我有“$userid”。我如何在开始时创建数组(并构造后续的foreach循环)来简化这一过程?在我上面的代码中,在名字后面粘贴它肯定是错误的方法(对不起,看起来可能很痛苦,哈哈)。简而言之,我想创建一个阵列,这样在我循环浏览和发送每个人的电子邮件时,就可以很容易地获取每个人的电子邮件、姓名和用户ID(这样他们的电子邮件就可以是唯一的/个性化的)。首先,关于重复数据消除-是的,PHP就是这么做的。关联数组(在您的情况下,通过
email
)只能有一个键,因此,如果表中的每封电子邮件有多行,则输出数组中将仅包含结果集中最新的一行。实际上,如果遇到另一个,PHP会覆盖上一个。在这里最好的做法是修复源数据并删除其中的重复数据,如果您不希望它们存在的话。否则,如果您不能确定它们在源表中的顺序,则可能无法确定哪些副本进入了输出数组
现在转到数组结构。考虑“代码”>电子邮件> /代码>的索引,正如您已经做的那样,但只需保持整个行的已获取数组,而不是串接字符串。然后,在构建电子邮件时,您就拥有了所需的所有部分,但那时您必须组合起姓名。如果您需要向输出电子邮件中添加任何其他详细信息,或者将来向表(和查询)中添加更多列,那么您已经可以在电子邮件中使用它们了
while ($row = mysqli_fetch_assoc($getnotify)) {
// Keep the entire fetched row, indexed by email
$notifyemailsarray[$row['email']] = $row;
}
构建电子邮件时,只需通过其数组键(列名)访问这些值
注意:这还将email
和notify
键保留在数组中,您可以忽略这些键。我建议您继续通过电子邮件
建立索引,而不是仅仅依靠阵列中的电子邮件值,因为您仍然需要它来处理通过阵列键进行的“意外”重复数据消除
Array
(
[jj@gmail.com] => John Jones 331322
[billw@yahoo.com] => Bill Wilson 331323
[kenny896@gmail.com] => Kenny Smith 331347
[gl222@hotmail.com] => Greg Lawson 331331
[chrisc1987@gmail.com] => Chris Connors 331325
)
排列
(
[jj@gmail.com] => [
[0]=>约翰
[1] =>琼斯
[2] => 331322
)$notifyemailsarray[$row['email']]=$row['firstname']." ".$row['lastname']. " " . $row['userid'];
为此:
$notifyemailsarray[$row['email']] = [ $row['firstname'], $row['lastname'], $row['userid']];
我们没有看到您的任何评论-这些答案满足您的需要吗?是的,很抱歉延迟,两个答案都很好,非常感谢!
$notifyemailsarray[$row['email']] = [ $row['firstname'], $row['lastname'], $row['userid']];