如何检测数组中是否存在特定的元素序列?例如,如果我有阵列和针
$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。
感谢您的任何建议!
加入阵列,并检查针的 strpos。
if ( strpos( join($haystack1), join($needle) ) >= 0 ) {
echo "Items found";
}
演示:http ://codepad.org/F13DLWOI
警告
这不适用于 haystack 数组中的对象或数组等复杂项目。此方法最适用于数字和字符串等项目。
对于没有数组元素是任何其他元素的前缀的特定情况(当两者都转换为字符串时),那么已经发布的答案将可以正常工作并且可能非常快。
这是一种在一般情况下可以正常工作的方法:
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;
}
免责声明:有一些方法可以编写这个函数,我希望当您搜索巨大的干草堆时,它会使其执行得更快,但对于第一种方法来说,简单是好的。
如果它们始终是单个数字/字符,那么您可以将所有元素转换为字符串、加入 by''
并使用正则表达式或字符串函数进行搜索。