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

  • Автор темы Автор темы AkudJEE
  • Дата начала Дата начала

AkudJEE

Новичок
Всем привет. У меня стоит задача обрезать текст после третьей запятой. У меня есть три кода, но все работают неправильно.
К примеру есть текст "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета", нужно его сократить до третьей запятой, должно получиться так: "пассажирский самолет, авиакомпания, закат"
Вот три кода:
1.
PHP:
$text= "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полетаа";
$imagemetakeyimages = implode(array_slice(explode('<br>',wordwrap( $text,100,'<br>',false)),0,1));
echo $imagemetakeyimages;
2.
PHP:
$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.
PHP:
$text1 = "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета" ;
echo mb_substr(preg_replace("#^(.{100}[^\,\s]*[\,\s])(.+)#s","\\1",$text1),0,-1,'utf8');
Обрезают они этот текст вот так:
1. пассажирский самолет, авиакомпания, закат, красное
2. пассажирский самолет, авиакомпания, закат
3. пассажирский самолет, авиакомпания, закат, красное небо
Работает правильно только второй вариант, но он не работает для множества картинок, то есть текст это ключевые слова картинок, в админке когда я обновляю страницу происходит запрос в базу данных и ключи в обрезанном виде записываются в БД, Код номер 2 работает только если есть одна картинка, а если много, то уже на сайте выводятся крякозябры.
1-й и 3-й варианты неправильно обрезают текст, они не режут вплоть до запятой, а просто режут по количеству символов. Как бы подобрать код, чтобы он правильно обрезал текст, с точностью до запятой?
 
Это пример, значение переставь.
PHP:
foreach (file('emails.txt') as $userData) {
    list ($login, $ip, $email, $password) = explode(',', $userData);
    file_put_contents('clear_emails.txt', $email.PHP_EOL, FILE_APPEND);
}

preg_replace("#^(.{100}[^\,\s]*[\,\s])(.+)#s","\\1",$text1),0,-1,'utf8'); - бредятина какая-то=)))
 
Извините, не смог разобраться, вместо текста у меня будет $row->metakey
 
Тему можно закрыть. Вот такой код буду использовать:
PHP:
$str=$row->metakey;
//разбиваем на массив
$arr=explode(", ",$str);
//берем первые 4 запятые
$arr=array_slice($arr,0,4);
//превращаем в строку
$imagemetakeyimages=implode(", ",$arr);
 
Много лишней работы будет. Хотя если производительность не смущает...

Проще найти где у тебя третья запятая и резануть

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
 
Производительность не смущает, запрос производится только один раз при входе в админ панель, в категорию картинок. Это нечасто бывает, раз в день примерно. Sender, ваш метод тоже попробую.
 
просто базу надо в нормальных формах держать, а не запятые резать...
 
Сверху