如何在PHP中的字符串中抓取给定关键字之前和之后的[x]字数?我试图将关键字定制的mysql查询的结果标记为一个片段。
答案 0 :(得分:5)
$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));