在数组中搜索连续值

时间:2011-06-10 00:41:11

标签: php arrays

在数组中搜索连续值的最佳方法是什么?

例如,在array('a', 'b')中搜索array('x', 'a', 'b', 'c')会产生1,因为这些值首先会在该索引处连续出现。

3 个答案:

答案 0 :(得分:0)

没有测试过这个,但是这样的事情应该做:

function consecutive_values(array $needle, array $haystack) {
    $i_max = count($haystack)-count($needle);
    $j_max = count($needle);
    for($i=0; $i<$i_max; ++$i) {
        $match = true;
        for($j=0; $j<$j_max; ++$j) {
            if($needle[$j]!=$haystack[$i+$j]) {
                $match = false;
                break;
            }
        }
        if($match) {
            return $i;
        }
    }
    return -1;
}

答案 1 :(得分:0)

这可能是次优的,但相当简洁:

$needle = array('a', 'b');
$haystack = array('x', 'a', 'b', 'c');

function searchInArray($haystack, $needle)
{
    $keys = array_search($haystack, $needle[0]);

    foreach ($keys as $key) {
        $endPos = $key + count($needle);   
        for ($i=1; $i<$count($needle); $i++) {
            if ($needle[$i] == $haystack[$key + $i]) {
                return $key;
            }
        }
    }
    return false;
}

答案 2 :(得分:0)

这就是你所要求的,它有点具体,因为所有数组都必须是非键控的,并且具有唯一值。

此外,在此版本中,数组只能包含整数或字符串值。如果您还需要NULL,object,float和数组,则需要将其中的一部分从array_flip() + isset()更改为array_search()

CodePad / Gist

相关部分是将您搜索的数组切片(此处为$in)与您搜索的数组(此处为$for)进行比较:

array_slice($in, $pos, $len) === $for
先前已查找

$pos $for的第一个值,$lencount($for)