Резка строки в PHP - PullRequest
       1

Резка строки в PHP

1 голос
/ 11 апреля 2011

У меня есть строка. Иногда он длиннее 50 символов, иногда короче. Если оно длиннее, я хочу сократить его до 50 (или ближайшего «.» После 50 символов, если это возможно.

В настоящее время я использую strlen для проверки, затем копирую каждый символ в новую строку, используя массив строк, пока не достигну 50 (в цикле for). Это похоже на плохой способ сделать это и медленно. У меня нет возможности сделать до ". расстаться пока ...

  • Это лучший способ разрезать нить?
  • Как можно сделать «.» часть

Ответы [ 4 ]

3 голосов
/ 11 апреля 2011

Сначала используйте strpos, чтобы найти «.» после первых 50 символов (как сказал @ohmusama), но обязательно проверьте возвращаемое значение и используйте mb_strlen!

$teaser = $text;
if (mb_strlen($text) > 50) {
   $period = strpos($text, '.', 50);
   if ($period !== false) {
      $teaser = substr($text, 0, $period);
   } else {
      // try finding a space...
      $space = strpos($text, ' ', 50);
      if ($space !== false) {
         $teaser = substr($text, 0, $space);
      } else {
         $teaser = substr($text, 0, 50);
      }
   }
}
3 голосов
/ 11 апреля 2011

Попробуйте что-то вроде этого:

<?php

//somehow your $text string is set

if(strlen($text) > 50) {

    //this finds the position of the first period after 50 characters
    $period = strpos($text, '.', 50);

    //this gets the characters 0 to the period and stores it in $teaser
    $teaser = substr($text, 0, $period);

}

Давайте обновим его, чтобы иметь более безопасный код, благодаря @ Michael_Rose

<?php

//somehow your $text string is set
$teaser = $text;
if(mb_strlen($text) > 50) {

    //this finds the position of the first period after 50 characters
    $period = strpos($text, '.', 50);
    //this finds the position of the first space after 50 characters
    //we can use this for a clean break if a '.' isn't found.
    $space = strpos($text, ' ', 50);

    if($period !== false) {
        //this gets the characters 0 to the period and stores it in $teaser
        $teaser = substr($text, 0, $period);
    } elseif($space !== false) {
        //this gets the characters 0 to the next space
        $teaser = substr($text, 0, $space);
    } else {
        //and if all else fails, just break it poorly
        $teaser = substr($text, 0, 50);
    }
}
0 голосов
/ 11 апреля 2011

Примерно так должно работать:

$string = substr($string, 0, 
    min(strpos($string, '.') >= 0? strpos($string, '.') : 50, 50));
0 голосов
/ 11 апреля 2011

Что вам нужно сделать, это получить «подстроку» из вашей строки.

В PHP функция здесь

например. получить первые 5 символов

echo substr('abcdef', 0, 5); //returns "abcde"

Остальная часть логики (добраться до ближайшего «.») Я оставляю вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...