#php #split
#php #разделение
Вопрос:
Допустим, у меня есть следующие адреса электронной почты, разделенные запятыми в строке:
$addrList = 'Kevin.Brine@pppg.com, Robert.Thomas@pppg.com, "Guice, Doug" <Doug.Guice@pppg.com>';
Мне нужен следующий результат:
[0] => Kevin.Brine@pppg.com
[1] => Robert.Thomas@pppg.com
[2] => "Guice, Doug" <Doug.Guice@pppg.com>
Кажется довольно простым, но эта запятая в имени, заключенном в кавычки, действительно заставила меня попытаться найти решение, используя либо preg_match_all, либо preg_split. Также мы должны учитывать электронные письма, которые также используют одинарные кавычки для имен, т. Е.: 'smith, tom' <tom.smith@abc.com>
Ответ №1:
str_getcsv() должна дать вам то, что вам нужно, хотя при этом будут удалены кавычки.
Редактировать
Если вы хотите поместить кавычки обратно в:
$addrList = 'Kevin.Brine@pppg.com, Robert.Thomas@pppg.com, "Guice, Doug" <Doug.Guice@pppg.com>';
$t = str_getcsv($addrList);
foreach($t as $k => $v) {
if (strpos($v,',') !== false) {
$t[$k] = '"'.str_replace(' <','" <',$v);
}
}
var_dump($t);
Комментарии:
1. Отличная идея — Я только что попробовал это, и я теряю фактический адрес электронной почты в последней записи в строке — я получаю только имя: Guice, Doug. Есть идеи? Спасибо!
2. Вы повторяете это в веб-браузере, не так ли! Как браузер реагирует, когда видит <что угодно>? Попробуйте вместо этого выполнить var_dump()
3. О, ты так хорош. Я полностью пропустил это! Большое спасибо!!
4. Обычно я работаю в Zend Studio 5.5 (по-моему, это всего лишь php 5.1) — но поскольку str_getcsv() работает на php 5.3 , я просто запустил его со своего сервера и браузера (как вы и сказали!) и полностью забыл об эффекте тега! Еще раз спасибо!