PHP preg_split удаляет запятые и завершающий пробел

Код ниже был взят непосредственно с PHP: preg_split – Manual

Пример # 1 preg_split (): Получить части строки поиска

<?php // split the phrase by any number of commas or space characters, // which include " ", \r, \t, \n and \f $keywords = preg_split("/[\s,]+/", "hypertext language, programming"); print_r($keywords); ?> 

Вышеприведенный пример выводит:

 Array ( [0] => hypertext [1] => language [2] => programming ) 

Я создаю систему тегов, которая позволит людям вводить что-либо в текстовое поле, а после возврата текст будет обработан и вставлен в базу данных. Данные могут быть одним словом или фразой, если набрано более одного тега, оно будет разделено запятой.

Поэтому я хотел бы иметь возможность сохранять «гипертекстовый язык» как есть, поэтому просто разделяйте белое пространство в начале и конце строки, а также любое пустое пространство после запятой, но не между словами, которые могут быть фразами.

Solutions Collecting From Web of "PHP preg_split удаляет запятые и завершающий пробел"

Вы можете использовать array_map() , array_map() explode() и trim() :

 <?php $keywords = array_map('trim', explode(',', 'hypertext language, programming')); print_r($keywords); ?> 

Что будет выводить:

 Array ( [0] => hypertext language [1] => programming ) 

DEMO

Я думаю, что это лучший выбор.

 $keywords = preg_split('/\s*,\s*/', "hypertext language, programming"); 

Прежде всего, «Regex is much slower» неверен, потому что это всегда зависит от шаблона. В этом случае preg_split () работает быстрее.

Второй preg_split более читабельен, и практика показывает более выгодный вариант. Будь проще.

 $b = "hypertext language, programming"; $time = microtime(1); for ($i=1; $i<100000; $i++) $a = array_map('trim', explode(',', $b)); // Split by comma printf("array_map(trim), explode = %.2f\n", microtime(1)-$time); $time = microtime(1); for ($i=1; $i<100000; $i++) $a = preg_split('/\s*,\s*/', $b); // Split by comma printf("Preg split = %.2f\n", microtime(1)-$time); 

 array_map(trim), explode = 0.32 Preg split = 0.22