2012-05-18 56 views
1

我想根據我的數組列表選擇的話

$sentence = "please take this words only to display in my browser"; 

$list = array ("display","browser","words","in"); 

我想要的輸出,就像「字樣在瀏覽器中顯示」

請別人從一個句子中選擇特定的單詞幫助我這個。 THX

+0

請詳細說明。您打算使用哪種語言?是一個網絡應用程序或獨立程序?句子和單詞從哪裏來。基本上爲什麼你需要這個... – tumchaaditya

+1

這個問題被標記爲PHP,所以我認爲他打算使用PHP,也許我錯了:P – Khriz

回答

0

我不知道任何簡短的版本,而不是逐字逐句檢查。

$words = explode(" ", $sentence); 
$new_sentence_array = array(); 
foreach($words as $word) { 
    if(in_array($word, $list)) { 
     $new_sentence_array[] = $word; 
    } 
} 

$new_sentece = implode(" ", $new_sentence_array); 
echo $new_sentence; 
+0

我想過這個。句子中的標點符號呢?我的意思是,我確信這個例子可以工作,但在更廣泛的應用中,我認爲它需要更多。 – bozdoz

1

我不知道這一個襯墊會做到這一點:在您自己的風險:)

編輯

echo join(" ", array_intersect($list, explode(" ",$sentence)));

用途:耶,它的工作,只是測試

+0

不錯,但我相信他希望按照它們在句子中出現的順序排列。 – bozdoz

1

你可以用preg_match做:

$sentence = "please take this words only to display in my browser"; 

$list = array ("display","browser","words","in"); 

preg_match_all('/\b'.implode('\b|\b', $list).'\b/i', $sentence, $matches) ; 
print_r($matches); 

你會得到詞語的順序

Array 
(
    [0] => Array 
     (
      [0] => words 
      [1] => display 
      [2] => in 
      [3] => browser 
     ) 

) 

但要小心使用正則表達式的性能,如果該文本並非如此簡單。

+0

適合時尚。 :) – bozdoz

+0

謝謝你!我雖然答案可能會被破壞使用常客:-) – Khriz

+0

正則表達式是我認爲的一個很好的解決方案。在那裏獲取不區分大小寫。但實際上,我現在想知道「in」這個詞:就像在更廣泛的應用程序中,它會找到像「find」這樣的詞,並在其中看到「in」。 – bozdoz

0

我想你可以搜索數組中的每個值的字符串,並將其分配給一個新的數組,其值爲strpos作爲鍵;這會給你一個可排序的數組,然後你可以按照字符串出現的順序輸出。見下文,或example

<?php 
$sentence = "please take this words only to display in my browser"; 

$list = array ("display","browser","words","in"); 

$found = array(); 

foreach($list as $k => $v){ 
    $position = strpos(strtolower($sentence), strtolower($v)); 
    if($position){ 
    $found[$position] = $v; 
    } 
} 

ksort($found); 
foreach($found as $v){ 
    echo $v.' ';  
} 
?> 
0
$narray=array(); 

foreach ($list as $value) { 
    $status=stristr($sentence, $value); 
    if ($status) { 
     $narray[]=$value; 
     } 
} 

echo @implode(" ",$narray);