【问题标题】:Loop through array using foreach使用 foreach 遍历数组
【发布时间】:2014-07-31 13:13:30
【问题描述】:

我有以下功能,假设向每个用户发送电子邮件。我相信在我的 foreach 循环中,我需要创建一个新的 foreach 循环来遍历每封电子邮件,然后向每个用户发送一封电子邮件,我该怎么做?

function getCronCuponDescargado(){

    $app = JFactory::getApplication();      
    $db = JFactory::getDBO();

    $query = 'SELECT k2i.title, count(cs.item_id) as contador, cs.user_id, u.email
                FROM #__k2_items as k2i 
                LEFT JOIN #__cuphoneo_subscripcion as cs ON cs.item_id = k2i.id
                LEFT JOIN #__users as u ON u.id = cs.user_id
                WHERE cs.estado = 1 GROUP BY cs.item_id ORDER BY cs.user_id';

    $db->setQuery($query);  
    $result = $db->loadObjectList();

    $query = 'SELECT count(item_id) 
                FROM #__cuphoneo_subscripcion
                WHERE estado = 0';
    $db->setQuery($query);
    $resultado = $db->loadObjectList();

    $mailer =& JFactory::getMailer();
    $mailer->IsHTML(true);  
    $emailSubject = '¡Tus Cuphones!';
    $sender = $mailer->From;
    $fcontent = '<h2>Listado de cupones a los que estas suscrito:</h2>
                    <table>
                        <tr>
                            <th>Nombre del cupón</th>
                            <th>Tiempo restante de cupón</th>
                        </tr>';

    foreach($result as $value){   

        $correoUser = $value->email;
        $idUser = $value->user_id;

        //Loop through array using foreach to send one email to each different user
        $correos = array($correoUser => $idUser);

        var_dump($correos);

        $mailer->setSender($sender);
        $mailer->addRecipient($correos);
        $mailer->setSubject($emailSubject);

        $fcontent .= '<tr>
                        <td>'.$value->title.'</td>                              
                        <td>'.$value->id.'</td>
                        <td>'.$value->contador.'</td>
                      </tr>';

    }

    $fcontent .= '</table>';
    $mailer->setBody($fcontent);
    $send =& $mailer->Send();
}

$correos 具有以下值:

array(1) { ["davidfuertesrojas@gmail.com"]=> string(3) "118" } array(1) { ["victoryork87@gmail.com"]=> string(3) "119" }

【问题讨论】:

  • 看来你根本不需要$correos = array($correoUser =&gt; $idUser);,你应该把$mailer-&gt;addRecipient($correos);改成$mailer-&gt;addRecipient($correoUser);

标签: php arrays email foreach


【解决方案1】:

你可以试试这个代码。我没有重构你的,也没有测试它,但你应该明白了。希望对您有所帮助。

function getCronCuponDescargado(){

$app = JFactory::getApplication();      
$db = JFactory::getDBO();

$query = 'SELECT k2i.title, count(cs.item_id) as contador, cs.user_id, u.email
            FROM #__k2_items as k2i 
            LEFT JOIN #__cuphoneo_subscripcion as cs ON cs.item_id = k2i.id
            LEFT JOIN #__users as u ON u.id = cs.user_id
            WHERE cs.estado = 1 GROUP BY cs.item_id ORDER BY cs.user_id';

$db->setQuery($query);  
$result = $db->loadObjectList();

$query = 'SELECT count(item_id) 
            FROM #__cuphoneo_subscripcion
            WHERE estado = 0';
$db->setQuery($query);
$resultado = $db->loadObjectList();


$fcontent = '<h2>Listado de cupones a los que estas suscrito:</h2>
                <table>
                    <tr>
                        <th>Nombre del cupón</th>
                        <th>Tiempo restante de cupón</th>
                    </tr>
                    <tr>
                      <td>[title]</td>                              
                      <td>[id]</td>
                      <td>[contador]</td>
                   </tr>
                  </table>
               ';

foreach($result as $value){  
    // set personalized content
    $content = str_replace(array('[title]', '[id]', '[contador]'), array($value->title, $value->id, $value->contador), $fcontent);

    // send message to the current user
    sendMailToUser ($value->email, $content);
}



}

function sendMailToUser ($recipient, $content) {
    $mailer =& JFactory::getMailer();
    $mailer->IsHTML(true);  
    $emailSubject = '¡Tus Cuphones!';
    $sender = $mailer->From;     
    $mailer->setSender($sender);
    $mailer->addRecipient($recipient);
    $mailer->setSubject($emailSubject);
    $mailer->setBody($content);
    $send =& $mailer->Send();
}

【讨论】:

  • 在您调用 sendMailToUser 函数之前,它似乎工作正常。由于某种原因它没有正确调用函数
  • 空白页,我在调用函数的正上方做了一个 var_dump,它一直进入到该调用,之后就没有了。
  • 你应该检查你的 php 错误日志,更具体地说。另一种选择是执行 exit('test');在函数体中逐行识别问题。
  • 我无法访问我的 php 错误日志,使用 exit('test'); 与使用 var_dump('test'); die(); 相同。正如我之前所说,它一直执行到函数的调用......
猜你喜欢
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2013-12-16
  • 2017-03-22
  • 2012-07-17
相关资源
最近更新 更多