配列リストに従って、文から特定の単語を選択したい
$sentence = "please take this words only to display in my browser";
$list = array ("display","browser","words","in");
「ブラウザに単語が表示される」のように出力したい
誰かこれで私を助けてください。THX
配列リストに従って、文から特定の単語を選択したい
$sentence = "please take this words only to display in my browser";
$list = array ("display","browser","words","in");
「ブラウザに単語が表示される」のように出力したい
誰かこれで私を助けてください。THX
この1つのライナーでそれができるのだろうか:
echo join(" ", array_intersect($list, explode(" ",$sentence)));
自己責任 :)
編集:ええ、それは仕事をします、ちょうどテストされました
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
)
)
ただし、テキストがそれほど単純でない場合は、正規表現のパフォーマンスに注意してください。
$narray=array();
foreach ($list as $value) {
$status=stristr($sentence, $value);
if ($status) {
$narray[]=$value;
}
}
echo @implode(" ",$narray);
strpos
配列内の各値の文字列を検索し、その値をキーとして新しい配列に割り当てることができると思います。これにより、ソート可能な配列が得られ、用語が文字列に表示される順序で出力できます。以下または例を参照してください。
<?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.' ';
}
?>
単語ごとにチェックするのではなく、これの短いバージョンを知りません。
$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;