2012-06-15 2 views
0

Прошу прощения, если это очень глупый вопрос или очевидная ошибка новичка, но я так же базовый, как я, я почти никогда не использовал цикл do-while (я знаю - могу не понимаю его сам! Как это возможно, что мне удалось избежать всех этих лет?)PHP условный цикл - длина строки

so: Я хочу выбрать несколько слов с начала текстового абзаца. Я использовал следующий код:

$no_of_char = 70; 
    $string = $content; 

    $string = strip_tags(stripslashes($string)); // convert to plaintext 
    $string = substr($string, 0, strpos(wordwrap($string, $no_of_char), "\n")); 

Какой вид работ, но проблема в том, что иногда дает пустые результаты. Я бы подумал, что это потому, что в абзаце содержатся пробелы, пустые строки и/или возврат каретки ... Так что я пытаюсь создать условие цикла, которое будет продолжаться до тех пор, пока длина строки не будет равна X символам. .

$no_of_char = 70; // approximation - how many characters we want 
    $string = $content; 

do { 
     $string = strip_tags(stripslashes($string)); // plaintext 
     $string = substr($string, 0, strpos(wordwrap($string, $no_of_char), "\n")); // do not crop words 
     } 
while (strlen($string) > 8); // this would be X - and I am guessing here is my problem 

Ну - очевидно, она не работает (в противном случае этот вопрос не будет) - и теперь она всегда ничего не производит (пустая строка)

ответ

2

Попробуйте использовать str_word_count:

$words = str_word_count($string, 2); 

2 - возвращает ассоциативный массив, где ключ является числовой положения слова внутри строки и значение является фактическим самого слова

Затем используйте array_slice:

$total_words = 70; 
$selected_words = array_slice($words, 0, $total_words); 
+0

Спасибо, ваш метод отлично работает. к сожалению, я могу только принять его. +1 :-) –

+0

DUDE. Ваш метод отлично работает. даже лучше, чем решение Колинка. с ним ничего не случилось - но это было намного тяжелее по памяти, а порой даже приурочено к исполнению. Ваш метод как-то был более эффективным. благодаря ! (и .. я узнал новую функцию (str_word_count()) - :-) –

2

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

Причина, по которой ваша петля не работала, заключается в том, что вы сказали ей отклонить все, что было длиннее 8 символов.

+0

Спасибо, 'ltrim()' действительно исправил проблему. Также путают '<' and '>' –

Смежные вопросы