За последние 24 часа нас посетил 20801 программист и 1006 роботов. Сейчас ищут 518 программистов ...

Обрезание текста на PHP после третьей запятой, как сделать е

Тема в разделе "PHP для новичков", создана пользователем AkudJEE, 24 окт 2012.

  1. AkudJEE

    AkudJEE Активный пользователь

    С нами с:
    29 июл 2012
    Сообщения:
    29
    Симпатии:
    0
    Всем привет. У меня стоит задача обрезать текст после третьей запятой. У меня есть три кода, но все работают неправильно.
    К примеру есть текст "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета", нужно его сократить до третьей запятой, должно получиться так: "пассажирский самолет, авиакомпания, закат"
    Вот три кода:
    1.
    Код (Text):
    1. $text= "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полетаа";
    2. $imagemetakeyimages = implode(array_slice(explode('<br>',wordwrap( $text,100,'<br>',false)),0,1));
    3. echo $imagemetakeyimages;
    2.
    Код (Text):
    1. $string="пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета";
    2. function crop_str($string, $limit)
    3. {
    4. $substring_limited = substr($string,0, $limit);        //режем строку от 0 до limit
    5. return substr($substring_limited, 0, strrpos($substring_limited, ', ' ));    //берем часть обрезанной строки от 0 до последнего пробела
    6. }
    7. $limit = 100;  
    8. $new_string = crop_str($string, $limit);
    9. echo  $new_string;
    3.
    Код (Text):
    1. $text1 = "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета" ;
    2. echo mb_substr(preg_replace("#^(.{100}[^\,\s]*[\,\s])(.+)#s","\\1",$text1),0,-1,'utf8');
    Обрезают они этот текст вот так:
    1. пассажирский самолет, авиакомпания, закат, красное
    2. пассажирский самолет, авиакомпания, закат
    3. пассажирский самолет, авиакомпания, закат, красное небо
    Работает правильно только второй вариант, но он не работает для множества картинок, то есть текст это ключевые слова картинок, в админке когда я обновляю страницу происходит запрос в базу данных и ключи в обрезанном виде записываются в БД, Код номер 2 работает только если есть одна картинка, а если много, то уже на сайте выводятся крякозябры.
    1-й и 3-й варианты неправильно обрезают текст, они не режут вплоть до запятой, а просто режут по количеству символов. Как бы подобрать код, чтобы он правильно обрезал текст, с точностью до запятой?

    Добавлено спустя 54 минуты 30 секунд:
    Тему можно закрыть. Вот такой код буду использовать:
    Код (Text):
    1. $str=$row->metakey;
    2. //разбиваем на массив
    3. $arr=explode(", ",$str);
    4. //берем первые 4 запятые
    5. $arr=array_slice($arr,0,4);
    6. //превращаем в строку
    7. $imagemetakeyimages=implode(", ",$arr);
     
  2. Vovchik48

    Vovchik48 Активный пользователь

    С нами с:
    30 мар 2012
    Сообщения:
    57
    Симпатии:
    0
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    А если по ошибке после комы не буде пробела, может появиться проблема, вот решение:
    Код (Text):
    1. $string = 'пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета';
    2.  
    3. $string_arr = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY); //Если ты исользуеш кодировку utf-8
    4. $string_arr = str_split($string); //Если ты используеш кодировку windows-1251
    5.  
    6. $count_com = 0;
    7. for($i;$i<count($string_arr);$i++){
    8.     if($string_arr[$i] == ',') $count_com++;
    9.     if($count_com == 3) break;
    10.     $new_string .= $string_arr[$i];
    11. }
    12. echo $new_string;
     
  3. AkudJEE

    AkudJEE Активный пользователь

    С нами с:
    29 июл 2012
    Сообщения:
    29
    Симпатии:
    0
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    Что вы имеете в виде "после комы не будет пробела"?
     
  4. alba2001

    alba2001 Активный пользователь

    С нами с:
    7 фев 2012
    Сообщения:
    56
    Симпатии:
    0
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    Код (Text):
    1. $imagemetakeyimages= implode(',',array_slice(explode(',', $text),0,3));
     
  5. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    круть, забукмарил, с Вашего позволения )
     
  6. alba2001

    alba2001 Активный пользователь

    С нами с:
    7 фев 2012
    Сообщения:
    56
    Симпатии:
    0
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    OK
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (PHP):
    1. $str = 'пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета';
    2. preg_match("/^(.+?,){3}/",$str,$m);
    3. echo $str = trim($m[0],','); 
     
  8. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Круть, даче чуть быстрее работает :)

    Добавил
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    у explode есть еще третий параметр limit.
    замерьте вариант с его использованием, ради смеха
    Код (PHP):
    1. $str = join(',',array_slice(explode(',', $str,4),0,3)); 
    по идее должно работать быстрее чем без него
     
  10. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    этот вариант работает даже чуть быстрей чем твой )))) то же добавлю )
     
  11. Gold Dragon

    Gold Dragon Активный пользователь

    С нами с:
    30 сен 2012
    Сообщения:
    306
    Симпатии:
    2
    Адрес:
    Тамбов
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    Протестировал, работает быстрее на 30% =)
     
  12. AkudJEE

    AkudJEE Активный пользователь

    С нами с:
    29 июл 2012
    Сообщения:
    29
    Симпатии:
    0
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    Классно!!! получилось!!! Спасибо!!!
    Буду использовать вот этот вариант:
    Код (Text):
    1. $str = join(',',array_slice(explode(',', $str,4),0,3));
    Как самый быстрый.

    Добавлено спустя 9 минут 24 секунды:
    Re: Обрезание текста на PHP после третьей запятой, как сделать е
    Что значит цифра 4 в этом коде?

    Добавлено спустя 20 секунд:
    Re: Обрезание текста на PHP после третьей запятой, как сделать е
    Без него тоже работает
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Re: Обрезание текста на PHP после третьей запятой, как сдела

    естественно работает. цифру четыре можно посмотрть в документации. но если уж так лень, то это максимальное количество членов массива после explode. Т.е. после третьего разбития, он оставшееся запихнёт в последний член, и не будет дальше парсить строку.