Код ниже был взят непосредственно с 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 )
Я создаю систему тегов, которая позволит людям вводить что-либо в текстовое поле, а после возврата текст будет обработан и вставлен в базу данных. Данные могут быть одним словом или фразой, если набрано более одного тега, оно будет разделено запятой.
Поэтому я хотел бы иметь возможность сохранять «гипертекстовый язык» как есть, поэтому просто разделяйте белое пространство в начале и конце строки, а также любое пустое пространство после запятой, но не между словами, которые могут быть фразами.
Вы можете использовать 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