我正在尝试创建一个变量,将包含从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();
但是你可以想象这是行不通的。
谢谢,克雷格。
首先,您必须将$stmt
传递到函数中。否则,在函数已知范围内,$stmt
不存在。
其次,在循环中回显电子邮件不会将其作为列表放入变量中。您需要将它连接到一个字符串变量(或其他东西)中,而不仅仅是回显它。
第三,如果您希望函数像echo createEmailList(...);
一样被调用,那么它需要return
一个值。
第四,我讨厌vb风格的foreach语法,所以我把它改成了正常的语法。
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);
function createEmailList($stmt) {
$emails = array();
foreach($stmt->fetchAll() as $row) {
$emails[] = $row['email'];
}
return implode(', ', $emails);
}
echo createEmailList($stmt);
技巧来了
function createEmailList() {
// fetch rows from DB
foreach($rows as $row){
$emails[] = $row['email'];
}
return $emails;
}