2009-08-12 2 views
0

Я пытаюсь ограничить количество символов, возвращаемых из строки с помощью PHP.PHP Ограничить вывод строки конкретными символами

Я применил решение, которое, похоже, разбило сервер (высокая загрузка/бесконечный цикл), поэтому я прошу альтернативы.

Я пытаюсь найти решение, которое разрезает строку и отображает определенное количество символов, но по-прежнему уважает смысл предложения, то есть он не делает разрез в середине слова

Мои вызов функции выглядит следующим образом:

<?php 
uc_textcut(get_the_title()); 
?> 

и в моей functions.php это код, который я использовал (и это делает аварии):

function uc_textcut($var) { 

    $position = 60; 
    $result = substr($var,$position,1); 

    if ($result !=" ") { 
     while($result !=" ") { 
      $i = 1; 
      $position = $position+$i; 
      $result = substr($var,$position,1); 
     } 
    } 

    $result = substr($var,0,$position); 
    echo $result; 
    echo "..."; 

} 

Моя проблема с $position = 60.

Чем выше это число, тем больше нагрузки требуется - как и его очень медленный цикл.

Я думаю, что что-то не так с while(), но я стараюсь, чтобы его все еще понятный посетитель, опять же, не срезая посреди слова.

Любой вход?

:) большое спасибо ребята

ответ

4

Если вы хотите, чтобы вырезать строку, не делая это в середине слова, вы можете рассмотреть возможность использования функции wordwrap.

Он вернет строку с линиями, разделенными символом новой строки; поэтому вам нужно взорвать эту строку, используя \ n в качестве разделителя, и возьмите первый элемент возвращаемого массива.


Для получения дополнительной информации и/или примеров и/или других решений, см, например:

+0

Хм .. должен сказать, это действительно умное мышление. Спасибо за совет. Я применил его ... он работает быстро, и он стоит одну строку кода. привет –

+1

@ Амад: добро пожаловать :-); @Byron: одна из хороших вещей с PHP заключается в том, что всегда есть что-то, что можно обнаружить ;-) (и это причина, по которой мне нравится SO ^^) –

0
$cutoff = 25; 
    if ($i < $cutoff) 
    { 
     echo $str; 
    } 
    else 
    { 
     // look for a space 
     $lastSpace = strrchr(substr($str,0,$cutoff)," "); 
     echo substr($str,0,$lastspace); 
     echo "..."; 
    } 
+0

раскол (»», STRLEN ($ ул)); выглядит неправильно. –

+0

Да, я удалил его, спасибо. –

0

В этом сократится от в 60 символов либо или первый пробел после 60 символов, идентичного к вашему исходному коду, но гораздо более эффективным:

$position = 60; 
if(substr($var,$position,1) == " ") $position = strpos($var," ",$position); 

if($position == FALSE) $result = $var; 
else $result = substr($var,0,$position); 
0
$matches = array(); 
preg_match('/(^.{60,}?) /', $text, $matches); 
print_r($matches[1]); 

Затем вы должны добавить эллипсы, если это необходимо.

0
<?php 

// same as phantombrain's but in a function 
function uc_textcut($text) { 
    $matches = array(); 
    preg_match('/(^.{60,}?) /', $text, $matches); 
    if (isset($matches[1])) { 
     echo $matches[1] . "..."; 
    } else { 
     echo $text; 
    } 
} 


// test it 
$textLong = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tempus dui non sapien ullamcorper vel tincidunt nisi cursus. Vestibulum ultrices pharetra justo id varius.'; 
$textShort = 'Lorem ipsum dolor sit amet.'; 

uc_textcut($textLong); 
echo "\n"; 
uc_textcut($textShort); 

>

Печать:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed... 
Lorem ipsum dolor sit amet. 
Смежные вопросы