3

如何检测数组中是否存在特定的元素序列?例如,如果我有阵列和针

$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。

感谢您的任何建议!

4

3 回答 3

6

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

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

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

警告

这不适用于 haystack 数组中的对象或数组等复杂项目。此方法最适用于数字和字符串等项目。

于 2012-06-01T15:49:46.647 回答
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;
}

看到它在行动

免责声明:有一些方法可以编写这个函数,我希望当您搜索巨大的干草堆时,它会使其执行得更快,但对于第一种方法来说,简单是好的。

于 2012-06-01T16:02:53.670 回答
3

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

于 2012-06-01T15:49:54.323 回答