2012-06-15 102 views
0

如果這是一個非常愚蠢的問題,或者一個明顯的新手錯誤 - 但我最基本的是,我幾乎從來沒有用過do - while循環之前(我知道 - 我可以不是自己理解!我怎麼可能設法避免它所有這些年??)PHP條件循環 - 字符串長度

所以: 我想從文本段落的開頭選擇一些單詞。 我用下面的代碼:

$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。你的方法效果很好。甚至比Kolink解決方案更好。沒有什麼是錯的 - 但它在記憶上更加重要,甚至超時執行。不知何故,你的方法更有效率。謝謝 ! (和..我學到了一個新的功能(str_word_count()) - :-) –

2

你擁有的最有可能的問題是串了。空白行在開始。您可以使用ltrim()輕鬆擺脫它們。然後使用您的原始代碼獲取第一個實際的換行符。

你的循環不起作用的原因是你告訴它拒絕超過8個字符的任何東西。

+0

謝謝,'ltrim()'確實解決了這個問題。另外,困惑的'<' and '>' –