PHP удаляет ',' из строки, если не существует

Я запускаю этот код:

$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