我试图获取数据库中所有电子邮件的列表,并在用逗号分隔的php变量中连接所有电子邮件。这就是我正在使用的:
$emailres=do_sqlquery("SELECT `email` FROM `users` WHERE `id` > 1",true);
$qtdemails=mysql_num_rows($emailres);
while($emailrows = mysql_fetch_row($emailres)) {
for($i=0; $i < $qtdemails; $i++){
$allemails .= $emailrows[$i].",";
}
}
如果我在数据库中有5封电子邮件,这就是我在$ allemails变量中的内容:
1@email.com,,,,,2@email.com,,,,,3@email.com,,,,,4@email.com,,,,,5@email.com,,,,,
这就是我需要的
1@email.com,2@email.com,3@email.com,4@email.com,5@email.com
你能帮助我吗?
谢谢
OBS:我知道它已被弃用了,我真的不在乎,但如果你想帮助我以正确的方式去做我想要学习的东西,否则只是帮我修理我的代码而且没问题。
答案 0 :(得分:1)
在循环中,将所有这些电子邮件添加到新的空数组中(删除字符串连接代码)。
$allemails[] = $emailrows[$i];
然后在你的循环外面做
$string=implode("," , $allEmails);
虽然您提到过您并不想被告知已弃用的代码,但您甚至错误地使用了弃用的代码:P根本不需要您的for循环。您只需执行fetch_assoc
并仅使用while
循环
修改:因为您提出了
while($emailrows = mysql_fetch_assoc($emailres)) {
if(!empty($emailrows['email']))
$allEmails[]=$emailrows['email'];
}
修改2
正如@sgt在下面的评论中提到的,您的查询返回空的电子邮件地址;为什么这样?虽然我添加了一个检查,但不包括输出中的那些,但是你应该更新你的查询,以便不首先返回这样的记录。
SELECT `email` FROM `users` WHERE `id` > 1 AND email <>''
答案 1 :(得分:0)
$emailary = array();
while($emailrows = mysql_fetch_assoc($emailres)) {
$emailary[] = $emailrows['email'];
}
$email_string = implode(",",$emailary);
echo $email_string;
答案 2 :(得分:-1)
while($emailrows = mysql_fetch_row($emailres)) {
if(!empty($emailrows['email'])){
$email_list.= $emailrows['email'].",";
}
}
$email_list = rtrim($email_list,',');
有一个函数rtrim从变量中删除最后一个。