我很抱歉,如果这是一个非常愚蠢的问题,或一个明显的新手错误 - 但我基本就是这样,我几乎从未使用过do-while循环(我知道 - 我自己无法理解它!这些年我是否有可能设法避免它?)
所以: 我想从文本段落的开头选择一些单词。 我使用了以下代码:
$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"));
哪种方式有效,但问题是有时会产生EMPTY结果。 我认为那是因为段落包含空格,空行和/或回车... 所以我试图创建一个循环条件,它将继续尝试,直到字符串的长度至少为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
嗯 - 显然它不起作用(否则这个问题不会) - 现在它总是不产生任何东西。(空字符串)
答案 0 :(得分:2)
最可能的问题是字符串在开头有空行。您可以使用ltrim()
轻松摆脱它们。然后使用原始代码获取第一个实际换行符。
你的循环不起作用的原因是你告诉它拒绝任何超过8个字符的东西。
答案 1 :(得分:2)
尝试使用str_word_count:
$words = str_word_count($string, 2);
2 - 返回一个关联数组,其中键是数字 字符串里面的单词的位置,值是实际的 单词本身
然后使用array_slice:
$total_words = 70;
$selected_words = array_slice($words, 0, $total_words);