我正在尝试创建一个包含从foreach循环创建的电子邮件列表的变量。
目前PHP就像这样:
// select all the emails from the users that are subscribed the email list
$query = "SELECT * FROM users WHERE email_list = 0";
$query_params = array();
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$rows = $stmt->fetchAll();
foreach($rows as $row):
$email = $row['email'];
echo "$email, ";
endforeach;
那个回声会产生例如。
email1, email2, email3 etc.
但我想要的是能够设置一个我可以在包含所有电子邮件的foreach之后使用的变量。
我尝试过使用一个函数,然后设置一个带有被调用函数的变量。
这样的事情:
function createEmailList() {
$rows = $stmt->fetchAll();
foreach($rows as $row):
$email = $row['email'];
echo "$email, ";
endforeach;
}
echo createEmailList();
但是你可以想象这不起作用。
谢谢,克雷格。
答案 0 :(得分:2)
首先,您必须将$stmt
传递给该函数。否则,$stmt
在函数知道的情况下不存在。
其次,在循环中回显电子邮件不会将其作为列表放入变量中。你需要将它连接成一个字符串变量(或其他东西),而不仅仅是回显它。
第三,如果你想要像echo createEmailList(...);
那样调用函数,那么它需要return
一个值。
第四,我讨厌foreach的vb风格语法,所以我把它改成了下面的普通语法。
function createEmailList($stmt)
{
$rows = $stmt->fetchAll();
$emailS = '';
foreach($rows as $row)
{
if($emailS!='')
{
//so it doesn't add the comma before first email
//nor after last email
$emailS .= ', ';
}
$emailS .= $row['email'];
}
return $emailS;
}
echo createEmailList($stmt);
答案 1 :(得分:2)
这是诀窍
function createEmailList() {
// fetch rows from DB
foreach($rows as $row){
$emails[] = $row['email'];
}
return $emails;
}
答案 2 :(得分:2)
function createEmailList($stmt) {
$emails = array();
foreach($stmt->fetchAll() as $row) {
$emails[] = $row['email'];
}
return implode(', ', $emails);
}
echo createEmailList($stmt);