如何检测数组中是否存在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。
感谢您的任何建议!
答案 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;
}
免责声明:有很多方法可以编写这个函数,我希望它能让你在搜索巨大的草垛时执行得更快,但对于第一种方法,简单就好了。