PHP中的字符串包含哪个数组成员?

时间:2014-01-27 14:30:58

标签: php arrays string contains

如何检查字符串是否包含数组成员,并返回相关成员的索引(整数)?

假设我的字符串是这样的:

$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()函数在此语句中返回我想要的内容吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

function get_index($str, $arr){
    foreach($arr as $key => $val){
    if(strpos($str, $val) !== false)
    return $key;
    }
return -1;
}

演示:https://eval.in/95398

答案 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;
}