PHP: разделить строку в зависимости от ее длины

Я использую 4 части для создания мета-заголовка из моего контента. Теперь я хочу ограничить мета-заголовок 55 символами и вырезать части из заголовка. Но я не хочу сокращать слово. Вместо этого я хочу проверить длину заголовка и удалить части с конца, пока весь заголовок снова не станет меньше 55.

Например, я использую следующие детали:

  • $product_name= название продукта - например, MacBook Pro - 11
  • $product_brand= название бренда - например, Apple - 5
  • $product_action= название товара - купить онлайн - 9
  • $product_store= название товара - на Storename - 9

В совокупности это 41 символ. Так что все нормально.

Но если у меня будет что-то вроде этого (75 символов):

Surface Pro X черный 64 ГБ, 512 ГБ 5G/Wi-Fi Microsoft купить онлайн в Storename

Я хочу свести это к следующему:

Surface Pro X черный 64 ГБ, 512 ГБ 5G/Wifi Microsoft

Потому что в названии меньше 55 символов. Я удалил product_action и product_store.

На данный момент я использую комбинированную строку и считаю символы:

$product_title          = $product_name.' '.$product_brand.' '.$product_action.' '.$product_store;
$product_title_count    = strlen($product_title);

Есть ли разумный способ создать подобное название? В настоящий момент я использую оператор if/else, который не работает.

2 ответа

Решение

Это должно произойти, ваша строка будет обрезана до ближайшего пробела (' ') длиной менее 55 символов.

$i = strlen($product_title)-1;
while($product_title[$i] != ' ' || $i > 55){
    $i--;
}
$final_string = substr($product_title, 0, $i);

Поместите это перед кодом @Agnohendrix

$product_title          = $product_name.' '.$product_brand.' '.$product_action.' '.$product_store;
$product_title_count    = strlen($product_title);

if($product_title_count > 55){
    $product_title          = $product_name.' '.$product_brand.' '.$product_action;
    $product_title_count    = strlen($product_title);
}
elseif($product_title_count > 55){
    $product_title          = $product_name.' '.$product_brand;
}
Другие вопросы по тегам