2010-09-10 10 views

cevap

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 />'; 

Ancak sözcük birden çok kez göründüğünde ne olmak istersiniz? Ya da kelime dizede görünmüyorsa?

DÜZENLEME

getWords2 ait

Genişletilmiş versiyonu anahtar kelimenin geçiş kümesi sayısı kadar dönmek için

$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)); 
sözcük birden çok kez görünürse
+0

Merhaba Mark sayesinde, o zaman bir araya getirmek istiyoruz katları bir snippet, en fazla 3 tekrar ya da öylesine söyleyin. bu yüzden sonuç şöyle görünebilir: Bu KEYWORD hakkındadır ... bu bir başka KEYWORD yapboz parçası ... bu KEYWORD üçüncü parça olacaktı –

+0

Yapmaya çalıştığım şey, her biri hakkında yeterli bilgi vermek. sonuç, birbirine çok benzemeden. –

+0

Bu bir cazibe gibi çalışır, teşekkürler Mark :) –

İlgili konular