根据数组列表从字符串中选择单词


Select words from string according to array list

我想根据我的数组列表从句子中选择特定的单词

$sentence = "please take this words only to display in my browser";
$list = array ("display","browser","words","in");

我希望输出就像" 单词显示在浏览器中">

请有人帮我解决这个问题。感谢

我想知道这一个班轮是否会这样做:

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
        )
)

但是,如果文本不是那么简单,请小心正则表达式的性能。

我不知道有什么简短的版本,而不是逐字检查。

$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;

我认为您可以在字符串中搜索数组中的每个值,并将其分配给一个以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.' ';    
}
?>
$narray=array();
foreach ($list as $value) {
    $status=stristr($sentence, $value);
    if ($status) {
        $narray[]=$value;
        }
}
echo @implode(" ",$narray);