我有一个声明如下所示的字符串
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');
有人能告诉我如何才能将电子邮件发送给多个名字的收件人?
答案 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"
}
编辑;在电子邮件数组中有错误顺序的键和值。 EDIT2;我记得,如果名字是名字和姓氏,我之前的代码将不起作用。将\ w +替换为更广泛的名称匹配。