PHP:检测数组中的特定元素序列

时间:2012-06-01 15:47:27

标签: php arrays sequence

如何检测数组中是否存在certan序列元素?例如。如果我有阵列和针

$needle = array(1,1);
$haystack1 = array(0,1,0,0,0,1,1,0,1,0);
$haystack2 = array(0,0,0,0,1,0,1,0,0,1);

如何检测子集$ needle是否存在于例如$ haystack1?对于$ haystack1,此方法应返回TRUE,对于$ haystack2,此方法应返回FALSE。

感谢您的任何建议!

3 个答案:

答案 0 :(得分:6)

加入阵列,并检查针的strpos。

if ( strpos( join($haystack1), join($needle) ) >= 0 ) {
    echo "Items found";
}

演示:http://codepad.org/F13DLWOI

警告

这对于haystack数组中的对象或数组等复杂项目不起作用。这种方法最好与数字和字符串一起使用。

答案 1 :(得分:3)

如果它们总是单个数字/字符,那么您可以将所有元素转换为字符串,按''加入,并使用正则表达式或字符串函数进行搜索。

答案 2 :(得分:3)

对于没有数组元素是任何其他元素的前缀的特定情况(当两者都被转换为字符串时),那么已经发布的答案将正常工作并且可能非常快。

这是一种在一般情况下可以正常工作的方法:

function subarray_exists(array $needle, array $haystack) {
    if (count($needle) > count($haystack)) {
        return false;
    }

    $needle = array_values($needle);
    $iterations = count($haystack) - count($needle) + 1;
    for ($i = 0; $i < $iterations; ++$i) {
        if (array_slice($haystack, $i, count($needle)) == $needle) {
            return true;
        }
    }

    return false;
}

See it in action

免责声明:有很多方法可以编写这个函数,我希望它能让你在搜索巨大的草垛时执行得更快,但对于第一种方法,简单就好了。