Всем привет. У меня стоит задача обрезать текст после третьей запятой. У меня есть три кода, но все работают неправильно. К примеру есть текст "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета", нужно его сократить до третьей запятой, должно получиться так: "пассажирский самолет, авиакомпания, закат" Вот три кода: 1. Код (Text): $text= "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полетаа"; $imagemetakeyimages = implode(array_slice(explode('<br>',wordwrap( $text,100,'<br>',false)),0,1)); echo $imagemetakeyimages; 2. Код (Text): $string="пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета"; function crop_str($string, $limit) { $substring_limited = substr($string,0, $limit); //режем строку от 0 до limit return substr($substring_limited, 0, strrpos($substring_limited, ', ' )); //берем часть обрезанной строки от 0 до последнего пробела } $limit = 100; $new_string = crop_str($string, $limit); echo $new_string; 3. Код (Text): $text1 = "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета" ; echo mb_substr(preg_replace("#^(.{100}[^\,\s]*[\,\s])(.+)#s","\\1",$text1),0,-1,'utf8'); Обрезают они этот текст вот так: 1. пассажирский самолет, авиакомпания, закат, красное 2. пассажирский самолет, авиакомпания, закат 3. пассажирский самолет, авиакомпания, закат, красное небо Работает правильно только второй вариант, но он не работает для множества картинок, то есть текст это ключевые слова картинок, в админке когда я обновляю страницу происходит запрос в базу данных и ключи в обрезанном виде записываются в БД, Код номер 2 работает только если есть одна картинка, а если много, то уже на сайте выводятся крякозябры. 1-й и 3-й варианты неправильно обрезают текст, они не режут вплоть до запятой, а просто режут по количеству символов. Как бы подобрать код, чтобы он правильно обрезал текст, с точностью до запятой? Добавлено спустя 54 минуты 30 секунд: Тему можно закрыть. Вот такой код буду использовать: Код (Text): $str=$row->metakey; //разбиваем на массив $arr=explode(", ",$str); //берем первые 4 запятые $arr=array_slice($arr,0,4); //превращаем в строку $imagemetakeyimages=implode(", ",$arr);
Re: Обрезание текста на PHP после третьей запятой, как сдела А если по ошибке после комы не буде пробела, может появиться проблема, вот решение: Код (Text): $string = 'пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета'; $string_arr = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY); //Если ты исользуеш кодировку utf-8 $string_arr = str_split($string); //Если ты используеш кодировку windows-1251 $count_com = 0; for($i;$i<count($string_arr);$i++){ if($string_arr[$i] == ',') $count_com++; if($count_com == 3) break; $new_string .= $string_arr[$i]; } echo $new_string;
Re: Обрезание текста на PHP после третьей запятой, как сдела Что вы имеете в виде "после комы не будет пробела"?
Re: Обрезание текста на PHP после третьей запятой, как сдела Код (Text): $imagemetakeyimages= implode(',',array_slice(explode(',', $text),0,3));
Re: Обрезание текста на PHP после третьей запятой, как сдела круть, забукмарил, с Вашего позволения )
Код (PHP): $str = 'пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета'; preg_match("/^(.+?,){3}/",$str,$m); echo $str = trim($m[0],',');
у explode есть еще третий параметр limit. замерьте вариант с его использованием, ради смеха Код (PHP): $str = join(',',array_slice(explode(',', $str,4),0,3)); по идее должно работать быстрее чем без него
Re: Обрезание текста на PHP после третьей запятой, как сдела этот вариант работает даже чуть быстрей чем твой )))) то же добавлю )
Re: Обрезание текста на PHP после третьей запятой, как сдела Протестировал, работает быстрее на 30% =)
Re: Обрезание текста на PHP после третьей запятой, как сдела Классно!!! получилось!!! Спасибо!!! Буду использовать вот этот вариант: Код (Text): $str = join(',',array_slice(explode(',', $str,4),0,3)); Как самый быстрый. Добавлено спустя 9 минут 24 секунды: Re: Обрезание текста на PHP после третьей запятой, как сделать е Что значит цифра 4 в этом коде? Добавлено спустя 20 секунд: Re: Обрезание текста на PHP после третьей запятой, как сделать е Без него тоже работает
Re: Обрезание текста на PHP после третьей запятой, как сдела естественно работает. цифру четыре можно посмотрть в документации. но если уж так лень, то это максимальное количество членов массива после explode. Т.е. после третьего разбития, он оставшееся запихнёт в последний член, и не будет дальше парсить строку.