如何解决在数组中搜索连续值
| 在数组中搜索连续值的最佳方法是什么? 例如,在array(\'x\',\'a\',\'b\',\'c\')
中搜索array(\'a\',\'b\')
将产生1
,因为值首先在该索引处连续出现。
解决方法
还没有测试过,但是应该这样做:
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;
}
, 这可能不是最佳选择,但相当简洁:
$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;
}
, 这可以满足您的要求,它有些特定,因为所有数组都必须是非键控的,并且必须具有唯一的值。
此外,在此版本中,数组只能包含整数或字符串值。如果还需要任何NULL,对象,浮点数和数组,则需要将其一部分从array_flip()
+isset()
更改为array_search()
。
键盘/要点
相关的部分是将要搜索的数组的一部分(此处为$in
)与要搜索的数组(此处为$for
)进行比较:
array_slice($in,$pos,$len) === $for
earlier11 up的第一个值是earlier9ѭ,earlier13ѭ是count($for)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。