我有一个阵列让我们说它看起来像这样:
$arr=array('aa','bb','cc');
现在让我们说我有一个看起来像这些字符串的字符串:
$str='bb';
$str='A_STRING_bb_WITH_SOME_TEXT';
$str='ASTRINGbbWITHSOMETEXT';
$str='A+STRING+bb+WITH+SOME+TEXT';
$str='A STRING bb WITH SOME TEXT';
我想要一个能给我的功能:
$r=find_which_one($arr,$str);
$r
应该是" bb"对于所有这些。最好的方法是什么?
答案 0 :(得分:1)
$arr=array('aa','bb','cc');
$str='A_STRING_bb_WITH_SOME_TEXT aa';
function find_which_one(array $arr,$str) {
$r = preg_match(
'/((' . implode(')|(', $arr) .'))/',
$str,
$matches
);
return ($r !== false) ? $matches[0] : $r;
}
$r=find_which_one($arr,$str);
var_dump($r);
如果未找到则返回false,否则返回首先发生的$ arr中的值
答案 1 :(得分:1)
这样的事情:
function find_which_one($arr,$str){
foreach($arr AS $needle){
if (strpos($str, $needle)){
return true; //returns true on the first match
}
}
return false
}
答案 2 :(得分:0)
这将返回正确的key
。如果找不到,它将返回false
。
function find_which_one($keys,$value) {
foreach($keys as $key) if (strpos($value, $key)) return $key;
return false;
}
答案 3 :(得分:0)
使用array_filter直截了当:
$arr = array('aa','bb','cc');
$str = 'A+STRING+bb+WITH+SOME+TEXT';
print_r ( array_filter($arr, function($k) use($str) {
return strpos($str, $k) !== FALSE; }) );
Array
(
[1] => bb
)
否则:
$str = 'ASTRINGbbWITHSOMETEXT';
print_r ( array_filter($arr, function($k) use($str) {
return strpos($str, $k) !== FALSE; }) );
Array
(
[1] => bb
)