从foreach循环的结果设置变量

时间:2014-08-18 23:20:16

标签: php foreach

我正在尝试创建一个包含从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();

但是你可以想象这不起作用。

谢谢,克雷格。

3 个答案:

答案 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);