【发布时间】:2015-09-15 13:42:20
【问题描述】:
我有一个名称数组:
$arr = array('Mark Whalberg', 'Will Ferrell', 'Mel Gibson', 'Tom Cruise');
然后我有一个字符串。该字符串可以包含 1 个或多个字符串。所以它可以爆炸。示例:
$str = "Will Ferrell";
或
$str = "Ferrell Will";
或
$str = "Ferrell";
我需要的是遍历 $arr 并选择其中所有与我的字符串匹配的名称。
所以如果字符串包含:
$str = "Will Ferrell";
或
$str = "Ferrell";
或
$str = "ferrell Will";
然后将获取数组中的第二个元素。 正则表达式是我认为的关键。我找不到的是如何用字符串的爆炸部分制作一个表达式。
编辑: 请不要关心迭代和类似的东西。问题只是关于将分解的字符串与数组中的元素进行比较的正则表达式。
编辑:
对不起,伙计。这是我的尝试:
$arr = array('Mark Whalberg', 'Will Ferrell', 'Mel Gibson', 'Tom Cruise');
$str = "Will Ferrell";
for($i=0;$i<count($arr);$i++){
if (preg_match('/'.$arr[$i].'/i',$str)){
echo $str . ' found';
}
}
此代码有效,但前提是匹配准确。如果我改为:
$str = "Ferrell Will";
然后我没有得到任何结果。
编辑:
最后我想出了一个解决方案。但是,恐怕这不是最好的方法。我正在做双重迭代。很高兴听到你们的一些评论:
$arr = array('Mark Whalberg', 'Will Ferrell', 'Mel Gibson', 'Tom Cruise', 'William Ferrell');
$str = "Ferrell Will";
$exploded_str = explode(' ', $str);
$found_array = array();
for($i=0;$i<count($arr);$i++){
$found = 0;
for($x=0;$x<count($exploded_str);$x++){
if (preg_match('/'.$exploded_str[$x].'/i',$arr[$i])){
$found++;
}
}
if($found == count($exploded_str)){
$found_array[count($found_array)] = $arr[$i];
}
}
print_r($found_array);
【问题讨论】:
-
到目前为止你尝试了什么?
-
可能会根据您当前的尝试提供帮助。
-
如果任何现有元素是
'Will',当$str = "Ferrell Will"时也应该匹配吗? -
如果在原始数组中有“William Ferrell”,它是否应该匹配“Will Ferrell”?
-
对不起,伙计。我现在将我的尝试添加到原始问题。