Я запускаю этот код:
$stmt = $pdo_conn->prepare("SELECT * from admin where support_emails = :support_emails and logged = :logged and disabled = :disabled "); $stmt->execute(array(':support_emails' => 'Y', ':logged' => 'in', ':disabled' => '')); $records = $stmt->fetchAll(PDO::FETCH_ASSOC); if(count($records) > 0) { foreach($records as $records2) { if(filter_var($records2["email"], FILTER_VALIDATE_EMAIL)) { $SupportEmailList = $records2["email"].', '.$SupportEmailList; } if(!empty($SupportEmailList)) { $SupportEmailList = substr($SupportEmailList, 0, -2); // removes last 2 characters (`, `) from end of string } } }
который возвращается
email1@domain1.com, email2@domain2.com
когда я запускаю SQL
я добавил:
if(!empty($SupportEmailList)) { $SupportEmailList = substr($SupportEmailList, 0, -2); // removes last 2 characters (`, `) from end of string }
для удаления ', '
из конца строки, если последний результат не существует, но, похоже, создается следующее:
email1@domain1.com, email2@domain2.c
скорее, чем:
email1@domain1.com, email2@domain2.com
Я бы предложил сохранить результаты в массиве и использовать implode (или join), чтобы присоединиться к ним с запятой.
Таким образом, вам не нужно иметь дело с вопросом о запятой.
$email_address = array(); foreach($records as $records2) { if(filter_var($records2["email"], FILTER_VALIDATE_EMAIL)) { array_push($email_address, $records2["email"]); } } $comma_separated_email_address = implode(",", $email_address); echo $comma_separated_email_address ;
Попробуйте trim()
. Вы можете передать список символов в качестве второго параметра, чтобы выбрать то, что вы хотите обрезать, начиная с начала и конца строки:
$example_1 = 'email1@domain1.com, email2@domain2.com'; $example_2 = 'email1@domain1.com, email2@domain2.com, '; $example_1 = trim($example_1, ', '); $example_2 = trim($example_2, ', '); var_dump($example_1); // string(38) "email1@domain1.com, email2@domain2.com" var_dump($example_2); // string(38) "email1@domain1.com, email2@domain2.com" var_dump(explode(', ', $example_1)); // array(2) { [0]=> string(18) "email1@domain1.com" [1]=> string(18) "email2@domain2.com" }
Вы могли бы разбить свою строку на explode
и снова implode
$data = explode(',', $elements); $cleanedData = implode(',', $data);
Вы можете урезать пространство в данных, обрезая все значения в массиве $ data
for ($i = 0; $i < count($data); $i++) $data[$i] = trim($data[$i]);
Я не понимаю ваш вопрос, удаляю ',', если он не существует? в любом случае Вы должны получить свои данные с помощью PDO::FETCH_NUM
. Таким образом, вы получите массив писем, таких как ['email1@domail.com', 'email2@mail.com']
а затем, если вы хотите что-то вроде 'email1@domail.com, email2@mail.com'
использовать implode для объединения элементов со строкой.
Сделай это:
$emails = " email1@domain1.com , fsdfsdffdsffds , email2@domain2.com,sddsfsdsd "; $emails = array_map('trim',explode(',',$emails)); $out = array_map(function($email){ return (filter_var($email, FILTER_VALIDATE_EMAIL)) ? $email : null; },$emails); $emails = implode(',',array_filter($out)); print_r($emails); // email1@domain1.com,email2@domain2.com