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

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-й варианты неправильно обрезают текст, они не режут вплоть до запятой, а просто режут по количеству символов. Как бы подобрать код, чтобы он правильно обрезал текст, с точностью до запятой?
 

niko42

Новичок
Это пример, значение переставь.
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'); - бредятина какая-то=)))
 

AkudJEE

Новичок
Извините, не смог разобраться, вместо текста у меня будет $row->metakey
 

AkudJEE

Новичок
Тему можно закрыть. Вот такой код буду использовать:
PHP:
$str=$row->metakey;
//разбиваем на массив
$arr=explode(", ",$str);
//берем первые 4 запятые
$arr=array_slice($arr,0,4);
//превращаем в строку
$imagemetakeyimages=implode(", ",$arr);
 

Sender

Новичок
Много лишней работы будет. Хотя если производительность не смущает...

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

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
 

AkudJEE

Новичок
Производительность не смущает, запрос производится только один раз при входе в админ панель, в категорию картинок. Это нечасто бывает, раз в день примерно. Sender, ваш метод тоже попробую.
 

Redjik

Джедай-мастер
просто базу надо в нормальных формах держать, а не запятые резать...
 
Сверху