当数组长度很大时,在foreach循环中取消设置数组值不能正常工作

时间:2013-06-11 12:20:41

标签: php arrays unset

大家好,我有一个主要问题,我有一个长度大于4000的数组。在一个foreach循环中,我试图取消设置每个键,但它不能正常工作。

$arr=array(  0 => '365-pramo@mageos.com',
1 => '365-pram@mageos.com',`.....`
4000 => '5333-pram123@mageos.com');

这里我需要从这个数组中获取每个邮件ID和用户ID(它实际上从表中获取)我将向每个邮件ID发送邮件并在我的表中更新。这是我的代码。

if(!empty($uids_eidsArr)){
           foreach($uids_eidsArr as $k=>$v){
              //echo $v;
              // echo $r->id;('-',
               $eArr=  explode('-', $v);

                   $headers= 'From: Ldamsin <admin@domain.org>' . "\r\n";
                   $headers.="MIME-Version: 1.0\r\n";
                   $headers.="Content-Type: text/html;\n\tcharset=\"iso-8859-1\"\r\n";

                   $content = $res_dup[0]->newsletter_content;

                  @mail($eArr[1], $res_dup[0]->newsletter_subject, $content, $headers); // mail to client
                    $this->db->set('user_id',$sent_by);
                    $this->db->set('sent_to',$eArr[0]);
                    $this->db->set('isSubscriber',$isSubscriber);
                    $this->db->set('content_id',$newsId);   
                    $this->db->insert('newsletter_senthistory');
                  // echo '<pre>';print_r($uids_eidsArr);echo '</pre>';
                    unset($uids_eidsArr[$k]);
                    //echo '<pre>';print_r($uids_eidsArr);echo '</pre>';
                   sleep(36);


           }  }

但并没有取消所有键的设置。我不知道是什么问题。是因为睡眠功能。因此,一些用户每次收到超过40封邮件。请帮帮我。

1 个答案:

答案 0 :(得分:1)

$sentUser=array();
if(!empty($uids_eidsArr)){
    foreach($uids_eidsArr as $k=>$v){
      //echo $v;
      // echo $r->id;('-',
       $eArr=  explode('-', $v);

           $headers= 'From: Ldamsin <admin@domain.org>' . "\r\n";
           $headers.="MIME-Version: 1.0\r\n";
           $headers.="Content-Type: text/html;\n\tcharset=\"iso-8859-1\"\r\n";

           $content = $res_dup[0]->newsletter_content;
            if(!in_array($eArr[0], $sentUser)){
                @mail($eArr[1], $res_dup[0]->newsletter_subject, $content, $headers); // mail to client
                $this->db->set('user_id',$sent_by);
                $this->db->set('sent_to',$eArr[0]);
                $this->db->set('isSubscriber',$isSubscriber);
                $this->db->set('content_id',$newsId);   
                $this->db->insert('newsletter_senthistory');
              // echo '<pre>';print_r($uids_eidsArr);echo '</pre>';
                unset($uids_eidsArr[$k]);//it is not required
                //echo '<pre>';print_r($uids_eidsArr);echo '</pre>';
               sleep(36);
               array_push($sentUser, $eArr[0]);
            }



    }  

我认为在您的阵列中多次获取同一个用户。您必须优化查询。我在上面给出了另一种解决方案。

相关问题