2010-09-10 17 views

Trả lời

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

Nhưng bạn muốn điều gì xảy ra nếu từ đó xuất hiện nhiều lần? Hoặc nếu từ đó không xuất hiện trong chuỗi?

EDIT

phiên bản mở rộng của getWords2 trở lên đến một số thiết lập của lần xuất hiện của từ khóa

$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)); 
+0

Hi Mark cảm ơn, nếu từ đó xuất hiện nhiều lần, sau đó tôi muốn xâu chuỗi một đoạn trích từ bội số, nói lên đến 3 lần lặp lại. vì vậy kết quả cuối cùng có thể trông giống như: đây là về KEYWORD đó là về ... đây là một mảnh KEYWORD câu đố ... điều này sẽ là KEYWORD mảnh thứ ba –

+0

Những gì tôi đang cố gắng làm là cung cấp đủ chi tiết về những gì mỗi kết quả là, không có quá giống nhau. –

+0

Điều đó hoạt động như một sự quyến rũ, cảm ơn Mark :) –

Các vấn đề liên quan