如何将MySQL获取的姓名邮箱字符串转为SendinBlue所需二维关联数组
实现方法(PHP)
直接用PHP的字符串处理+正则匹配就能搞定,步骤很清晰:
- 把原始字符串按逗号拆分,兼容逗号后有/无空格的情况
- 遍历每个拆分出来的联系人条目,提取姓名和邮箱
- 将提取到的信息组装成SendinBlue要求的二维关联数组
完整代码示例:
// 从数据库获取的原始字符串 $string = "john('john@yahoo.com'), frank('frank@gmail.com'),simon('simon@to.com')"; // 初始化最终的收件人数组 $to = []; // 拆分字符串,处理逗号后带/不带空格的情况 $recipients = preg_split('/,\s*/', $string); // 遍历每个联系人条目 foreach ($recipients as $recipient) { // 用正则匹配提取姓名和邮箱 if (preg_match('/^([^\(]+)\(\'([^\']+)\'\)$/', $recipient, $matches)) { $name = trim($matches[1]); // 消除姓名前后可能存在的空格 $email = $matches[2]; $to[] = ['name' => $name, 'email' => $email]; } } // 组装SendinBlue的邮件对象 $sendSmtpEmail = new \SendinBlue\Client\Model\SendSmtpEmail([ 'subject' => 'Report', 'sender' => ['name' => 'sender', 'email' => 'sender@domain.com'], 'to' => $to, 'htmlContent' => $output ]);
补充说明
- 正则
/^([^\(]+)\(\'([^\']+)\'\)$/专门匹配姓名('邮箱')格式的字符串,确保准确提取内容 - 加
trim()是为了容错,比如原始字符串里如果姓名前后不小心带了空格也能处理 - 遇到格式不符合的条目会自动跳过,不会影响正常条目组装
内容的提问来源于stack exchange,提问作者R_life_R
相关产品推荐
相关产品推荐

