我有一系列术语:
$arr = [
'black',
'white and black',
'lion',
'fast',
'zebra',
'lion is fast',
'zebra is white'
];
我想根据特定的句子来过滤此数组,例如:
zebra is white and black, and lion is fast
我尝试使用strpos
和一些正则表达式函数,但是没有得到预期的结果。我期望的是在列表中获得minimum
项与句子“ ORDER”部分匹配的项,即:
[
'white and black',
'zebra',
'lion is fast'
]
这样,我可以将结果与句子中的各个部分相匹配,如下所示:
\zebra\ is \white and black\, and \lion is fast\
,并忽略数组中的其他项,因为它们不完全匹配。
能不能请我引导正确的方法?
答案 0 :(得分:1)
按长度排序数组并循环。
当您在字符串中找到数组项时,将其保存到新数组并从字符串中删除子字符串。
在代码末尾,您将获得匹配项的数组。
$arr = ['black',
'white and black',
'lion',
'fast',
'zebra',
'lion is fast',
'zebra is white'];
$str = "zebra is white and black, and lion is fast";
function sortl($a,$b){
return strlen($b)-strlen($a);
}
usort($arr,'sortl');
foreach($arr as $s){
if(strpos($str, $s) !== false){
$new[] = $s;
$str = str_replace($s, "", $str);
}
}
var_dump($new);
输出:
array(3) {
[0]=>
string(15) "white and black"
[1]=>
string(12) "lion is fast"
[2]=>
string(5) "zebra"
}