迭代数组,然后再次重置多个数组

时间:2019-07-08 09:18:56

标签: php arrays codeigniter

我想迭代数组,然后应在PHP中再次将其重置。   我要实现的以下逻辑

我有一个smtp数组和另一个我想从中发送的数组  每个smtp发送一次电子邮件。  实际上,我有一个要发送电子邮件的数组列表,但是我有  几个smtp主机。  我在foreach循环中迭代数组的列表。  我有一个smtp数组,在其中定义了一定的发送电子邮件限制。

function sendmail_test(){
   return "Sent<br/>";
}

$email_arrays=array(
   'test1@gmail.com',
   'test2@gmail.com',
   'test3@gmail.com',
   'test4@gmail.com',
   'test5@gmail.com',
   'test6@gmail.com',
);

$smtp_array=array(
   'gmail_smtp@gmailsmtp.com'=>10,
   'yogya_smtp@yogyasmtp.com'=>15
);


$smtp_count=count($smtp_array);
$smtp_counter=0;
for($i=0;$i<=$smtp_count;$i++){       

   foreach($email_arrays as $ek=>$ev){
        print_r($smtp_counter);
        echo sendmail_test();
    }
    $smtp_counter++;
}

实际上,我想要这样。 我目前在$ smtp_array中有两个smtp

第一个电子邮件应以此smtp触发 test1@gmail.com-> gmail_smtp@gmailsmtp.com'

第二封电子邮件应以此发送 test2@gmail.com',->'yogya_smtp@yogyasmtp.com'

,然后应该这样触发第三封电子邮件 test3@gmail.com-> gmail_smtp@gmailsmtp.com'

然后重置,它将在$ smtp_array中使用第一个smtp。 我希望你能明白我的意思。

2 个答案:

答案 0 :(得分:0)

您可以按照以下方式进行处理

$hosts = array_keys($smtp_array);
foreach($email_arrays as $k => $v){
  $email = $v;
  $host  = $hosts[$k%2];
  echo $email.'----'.$host;echo '<br/>';// use $email and $host to send the email
}

答案 1 :(得分:0)

如果要遍历所有smtp服务器并在拥有最后一个服务器时将其重置为开始,则可以使用currentendreset和{{3 }}。

要获取smtp的值,可以使用next,然后也可以key到列表。

例如:

function sendmail_test()
{
    return "Sent<br/>";
}

$email_arrays = array(
    'test1@gmail.com',
    'test2@gmail.com',
    'test3@gmail.com',
    'test4@gmail.com',
    'test5@gmail.com',
    'test6@gmail.com',
);

$smtp_array = array(
    'gmail_smtp@gmailsmtp.com' => 10,
    'yogya_smtp@yogyasmtp.com' => 15
);

$lastElement = end($smtp_array);
reset($smtp_array);

foreach ($email_arrays as $em) {
    $current = current($smtp_array);
    //sendmail_test();
    echo "Send email $em with smtp: " . key($smtp_array) . PHP_EOL;
    next($smtp_array);

    if ($lastElement === $current) {
        reset($smtp_array);
    }
}

结果:

Send email test1@gmail.com with smtp: gmail_smtp@gmailsmtp.com
Send email test2@gmail.com with smtp: yogya_smtp@yogyasmtp.com
Send email test3@gmail.com with smtp: gmail_smtp@gmailsmtp.com
Send email test4@gmail.com with smtp: yogya_smtp@yogyasmtp.com
Send email test5@gmail.com with smtp: gmail_smtp@gmailsmtp.com
Send email test6@gmail.com with smtp: yogya_smtp@yogyasmtp.com

add an smtp server