将字符串分解为具有指定值的数组,并将电子邮件发送给多个reciepient

时间:2017-08-15 01:39:35

标签: php arrays laravel email

我有一个声明如下所示的字符串

var email = 'xxx@email.com,ggg@gmail.com'

我正在使用explode将其作为数组

$emails = explode(",", $user->email);

使用$ email输出

array:2 [▼
  0 => "xxx@email.com"
  1 => "ggg@gmail.com"
]

我期待的是

$a = array('xxx@email.com'=>'abc','ggg@gmail.com'=>'cde');

Result:

array:2 [▼
  "xxx@email.com"=> "abc"
  "ggg@gmail.com"=> "cde"
]

我想向收件人发送电子邮件,邮件名称为recipient.e.g

abc(xxx@email.com);cde(ggg@gmail.com)

当邮件 - >单个收件人

时,它可以正常工作
mail->to('xxx@email.com','abc');

有人能告诉我如何才能将电子邮件发送给多个名字的收件人?

2 个答案:

答案 0 :(得分:1)

您尝试使用foreach吗?例如:

foreach($a as $key=>$val) {
   mail->to($key, $val);
}

更新

如果你的字符串与你所说的一样,也许你可以这样做:

$string = "abc(xxx@email.com);cde(ggg@gmail.com)";
$data = explode(';', $string);
$detailsArray = array();

foreach($data as $datax){
    $email = "";
    //Using regex to filter out string with paranthesis
    preg_match('#\((.*?)\)#', $datax, $email);

    //using str_replace to remove the email together with paranthesis to get the name
    $name = str_replace($email[0], "", $datax);

    //removing paranthesis
    $email[0] = str_replace(array('(',')'),'',$email[0]);

    //push it into array
    $array = array($email[0] => $name);
    array_push($detailsArray,$array );
}

答案 1 :(得分:1)

试试这个:
它将使用preg_match_all创建两个数组,一个包含名称,另一个包含电子邮件 然后我使用array_combine创建带有命名键的电子邮件数组。

$str = "johnny-boy doe(xxx@email.com);cde(ggg@gmail.com)";

Preg_match_all('/([-A-Za-z0-9 ]+)\((.*?)\)/', $str, $match);

$emails = array_combine($match[2], $match[1]);

Var_dump($emails);

输出:

array(2) {
  ["xxx@email.com"] => string(14) "johnny-boy doe"
  ["ggg@gmail.com"] => string(3) "cde"
}

https://3v4l.org/shqAe

编辑;在电子邮件数组中有错误顺序的键和值。 EDIT2;我记得,如果名字是名字和姓氏,我之前的代码将不起作用。将\ w +替换为更广泛的名称匹配。