Вы можете начать с , разбив строку на "полезные" части, с 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);
(Здесь регулярное выражение будет разделено на ',
', ';
' и '\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)
Что лучше; -)