使用foreach循环遍历数组

3
我有以下函数,它应该向每个用户发送电子邮件。我相信在我的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 => $idUser);,而且你应该将 $mailer->addRecipient($correos); 改为 $mailer->addRecipient($correoUser); - James
1个回答

0
你可以尝试这段代码。我没有重构你的代码,也没有测试过,但是你应该能够理解。希望能对你有所帮助。
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 函数之前,它似乎工作得很好。由于某种原因,它没有正确地调用该函数。 - Victor York
空白页面,我在函数调用的正上方做了一个 var_dump,它一直进入到那个调用,之后就不再执行了。 - Victor York
你应该检查你的PHP错误日志,以更具体地了解问题。另一个选项是在函数体中逐行执行exit('test');来识别问题。 - eroteev
我无法访问我的PHP错误日志,并且使用exit('test');与使用var_dump('test'); die();相同。就像我之前说的那样,它执行到调用函数的所有步骤... - Victor York

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接