如何检查字符串是否包含数组成员,并返回相关成员的索引(整数)?
假设我的字符串是这样的:
$string1 = "stackoverflow.com";
$string2 = "superuser.com";
$r = array("queue" , "stack" , "heap");
get_index($string1 , $r); // returns 1
get_index($string2 , $r); // returns -1 since string2 does not contain any element of array
如何以优雅(简短)有效的方式编写此功能?
我找到了一个函数(表达式?),它检查字符串是否包含数组成员:
(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
但这是一个布尔值。 count()
函数在此语句中返回我想要的内容吗?
感谢您的帮助!
答案 0 :(得分:0)
function get_index($str, $arr){
foreach($arr as $key => $val){
if(strpos($str, $val) !== false)
return $key;
}
return -1;
}
答案 1 :(得分:0)
这将找到数组中匹配元素的数量,如果您想要所有匹配的键,请使用注释行:
function findMatchingItems($needle, $haystack){
$foundItems = 0; // start counter
// $foundItems = array(); // start array to save ALL keys
foreach($haystack as $key=>$value){ // start to loop through all items
if( strpos($value, $needle)!==false){
++$foundItems; // if found, increase counter
// $foundItems[] = $key; // Add the key to the array
}
}
return $foundItems; // return found items
}
findMatchingItems($string1 , $r);
findMatchingItems($string2 , $r);
如果要返回所有匹配的键,只需将$foundItems
更改为数组,然后在if语句中添加键(切换到注释行)。
如果您只想知道某事是否匹配
function findMatchingItems($needle, $haystack){
if( strpos($value, $needle)!==false){
return true;
break; // <- This is important. This stops the loop, saving time ;)
}
return false;// failsave, if no true is returned, this will return
}
答案 2 :(得分:-1)
我会做这样的功能:
function getIndex($string, $array) {
$index = -1;
$i = 0;
foreach($array as $array_elem) {
if(str_pos($array_elem, $string) !== false) {
$index = $i;
}
$i++;
}
return $index;
}