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

#php #string-length #strlen #meta-title

#php #длина строки #strlen #мета-заголовок

Вопрос:

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

Я использую следующие части, например:

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

В совокупности это 41 символ. Итак, все в порядке.

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

Surface Pro X black 64 ГБ, 512 ГБ 5G / Wifi Microsoft купить онлайн в магазине

Я хочу свести ее к этому:

Surface Pro X black 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, который плохо работает.

Комментарии:

1. Технически, все 4 вещи вместе взятые могут содержать максимум 52 символа с разделением 3 пробелами. Что, если слова будут сокращены, если вы хотите только до 55?

Ответ №1:

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

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

Комментарии:

1. Используя строку OP «Surface Pro X black 64 ГБ, 512 ГБ 5G / Wifi Microsoft купить онлайн в Storename», ваш код возвращает «Surface Pro X black 64 ГБ, 512 ГБ 5G / Wifi Microsoft купить». Как обрезать ее сразу после «Microsoft»?

2. Это строка длиной 55 символов, что, если вы поместите $ i > 54 ?

3. То же самое, если вы ставите $i > 53 или $i > 52 … Это не ограничение.

4. Я попробовал это здесь , и он усекает ‘buy’ с условием ($ i > 54)

5. То же самое здесь, это то, что я сказал. Но он усекает «купить» даже с помощью $i > 53 или $i > 52 . Итак, проблема, на которую я указал, заключается не в этом условии.

Ответ №2:

поместите это перед кодом @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;
}