Wie kann ich die Anzahl der Wörter vor und nach einem bestimmten Schlüsselwort in einer Zeichenfolge in PHP ermitteln? Ich versuche, Ergebnisse aus einer MySQL-Abfrage, die auf das Keyword zugeschnitten ist, als Snippet zu token.Greifen Sie x Anzahl der Wörter vor und nach einem bestimmten Schlüsselwort?
5
A
Antwort
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 />';
Aber was möchten Sie tun, wenn das Wort mehrmals erscheint? Oder wenn das Wort nicht in der Zeichenfolge erscheint?
EDIT
erweiterte Version von getWords2 auf eine festgelegte Anzahl von Vorkommen des Keywords zurück nach oben
$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));
Hallo Markus Danke, wenn das Wort mehrmals angezeigt wird, dann will ich Stück zusammen ein Schnipsel von Vielfachen, sagen wir bis zu 3 Iterationen. So könnte das Endergebnis aussehen: Hier geht es um KEYWORD, das ist ... das ist ein weiteres KEYWORD-Puzzlestück ... das wäre KEYWORD das dritte Stück –
Was ich versuche zu tun ist, genug Details über die einzelnen zu geben Ergebnis ist, ohne einander zu ähnlich zu sein. –
Das funktioniert wie ein Charme, danke viel Mark :) –