Вы можете начать расщепления строки на "полезные" части, с preg_split
, и, затем, implode
эти части вместе:
$str_in = "dog, cat ,car,tea pot,, ,,, ;;
fly, cake";
$parts = preg_split('/[,;\s]/', $str_in, -1, PREG_SPLIT_NO_EMPTY);
$str_out = implode(',', $parts);
var_dump($parts, $str_out);
(Здесь, регулярное выражение будет split на ',
', ';
' и '\s
', что означает любой символ пробела - и мы сохраняем непустые детали)
Получит вас, для $parts
:
array
0 => string 'dog' (length=3)
1 => string 'cat' (length=3)
2 => string 'car' (length=3)
3 => string 'tea' (length=3)
4 => string 'pot' (length=3)
5 => string 'fly' (length=3)
6 => string 'cake' (length=4)
И для $str_out
:
string 'dog,cat,car,tea,pot,fly,cake' (length=28)
Редактировать после комментария: жаль, что я не сделал обратите внимание, что один ^^
В этом случае, вы не можете разделить на белом пространстве :-(я бы, вероятно, расщепляется «,
» или «;
», перебирайте частей, используя trim
удалить уайт-символы в начале и конец каждого элемента, и только сохранить те, которые не являются пустыми:
$useful_parts = array();
$parts = preg_split('/[,;]/', $str_in, -1, PREG_SPLIT_NO_EMPTY);
foreach ($parts as $part) {
$part = trim($part);
if (!empty($part)) {
$useful_parts[] = $part;
}
}
var_dump($useful_parts);
Выполнение этой части кода получает меня:
array
0 => string 'dog' (length=3)
1 => string 'cat' (length=3)
2 => string 'car' (length=3)
3 => string 'tea pot' (length=7)
4 => string 'fly' (length=3)
5 => string 'cake' (length=4)
И взрывается все вместе, я получаю, на этот раз:
string 'dog,cat,car,tea pot,fly,cake' (length=28)
Что лучше ;-)
Это отличный ответ. Как бы вы сохранили «чайный горшок» как один предмет в конечном списке? –
@Patrick: Я отредактировал свой ответ со второй мыслью - не совсем заметил этот случай ^^ –
Это прекрасно работает. Чем ты, очень. –