5
如何在PHP中的字符串中获取给定关键字之前和之后的单词数量[x]?我试图从为关键字定制的mysql查询结果标记为片段。抓取给定关键字前后的x个单词数?
如何在PHP中的字符串中获取给定关键字之前和之后的单词数量[x]?我试图从为关键字定制的mysql查询结果标记为片段。抓取给定关键字前后的x个单词数?
$string = 'This is a test string to see how to grab words from an arbitrary sentence. It\'s a little hacky (as you can see from the results) - but generally speaking, it works.';
echo $string,'<br />';
function getWords($string,$word,$before=0,$after=0) {
$stringWords = str_word_count($string,1);
$myWordPos = array_search($word,$stringWords);
if (($myWordPos-$before) < 0)
$before = $myWordPos;
return array_slice($stringWords,$myWordPos-$before,$before+$after+1);
}
var_dump(getWords($string,'test',2,1));
echo '<br />';
var_dump(getWords($string,'this',2,1));
echo '<br />';
var_dump(getWords($string,'sentence',1,3));
echo '<br />';
var_dump(getWords($string,'little',2,2));
echo '<br />';
var_dump(getWords($string,'you',2,2));
echo '<br />';
var_dump(getWords($string,'results',2,2));
echo '<br />';
var_dump(getWords($string,'works',2,2));
echo '<hr />';
function getWords2($string,$word,$before=0,$after=0) {
$stringWords = str_word_count($string,1);
$myWordPos = array_search($word,$stringWords);
$stringWordsPos = array_keys(str_word_count($string,2));
if (($myWordPos+$after) >= count($stringWords))
$after = count($stringWords) - $myWordPos - 1;
$startPos = $stringWordsPos[$myWordPos-$before];
$endPos = $stringWordsPos[$myWordPos+$after] + strlen($stringWords[$myWordPos+$after]);
return substr($string,$startPos,$endPos-$startPos);
}
echo '[',getWords2($string,'test',2,1),']<br />';
echo '[',getWords2($string,'this',2,1),']<br />';
echo '[',getWords2($string,'sentence',1,3),']<br />';
echo '[',getWords2($string,'little',2,2),']<br />';
echo '[',getWords2($string,'you',2,2),']<br />';
echo '[',getWords2($string,'results',2,2),']<br />';
echo '[',getWords2($string,'works',1,3),']<br />';
但是,如果单词出现多次,您希望发生什么?或者如果这个词没有出现在字符串中?
编辑
getWords2的扩展版本,返回到关键字的出现集数
$string = 'PHP is a widely-used general-purpose scripting language that is especially suited for Web development. The current version of PHP is 5.3.3, released on July 22, 2010. The online manual for PHP is an excellent resource for the language syntax and has an extensive list of the built-in and extension functions. Most extensions can be found in PECL. PEAR contains a plethora of community supplied classes. PHP is often paired with the MySQL relational database.';
echo $string,'<br />';
function getWords3($string,$word,$before=0,$after=0,$maxFoundCount=1) {
$stringWords = str_word_count($string,1);
$stringWordsPos = array_keys(str_word_count($string,2));
$foundCount = 0;
$foundInstances = array();
while ($foundCount < $maxFoundCount) {
if (($myWordPos = array_search($word,$stringWords)) === false)
break;
++$foundCount;
if (($myWordPos+$after) >= count($stringWords))
$after = count($stringWords) - $myWordPos - 1;
$startPos = $stringWordsPos[$myWordPos-$before];
$endPos = $stringWordsPos[$myWordPos+$after] + strlen($stringWords[$myWordPos+$after]);
$stringWords = array_slice($stringWords,$myWordPos+1);
$stringWordsPos = array_slice($stringWordsPos,$myWordPos+1);
$foundInstances[] = substr($string,$startPos,$endPos-$startPos);
}
return $foundInstances;
}
var_dump(getWords3($string,'PHP',2,2,3));
嗨,马克的感谢,如果这个词出现多次,那么我想拼凑来自倍数的片段,例如多达3次迭代。所以最终的结果可能是这样的:这是关于KEYWORD是关于......这是另一个关键字拼图块......这将是KEYWORD第三块 – 2010-09-10 14:44:15
我想要做的是提供足够的细节,结果是,没有太相似的对方。 – 2010-09-10 14:46:14
这就像一个魅力,谢谢很多马克:) – 2010-09-12 14:28:49