【发布时间】:2013-06-05 15:15:23
【问题描述】:
如何编写[find-array-in-array] 函数?
伪代码
干草堆:
array(0=a, 1=b, 2=a, 3=b, 4=c, 5=c, 6=a, 7=b, 8=d, 9=c, 10=a, 11=b, 12=a, 13=b, 14=c);
针:
array(a, b, c);
返回:
array ( array (2, 3, 4), array(12, 13, 14) )
希望: Haystack 中与 Needle 匹配的钥匙。以上应该给出2个匹配项:
- 比赛 = 干草堆 2-4
- 比赛 = 干草堆 12-14
它应该找不到"a b"、"a b d" 或"c a b" 等,
Needle 中每个值的唯一实例 - 以指定的顺序。
我想让它成为一个函数,这样我就可以重复运行它(我有很多这样的模式)。
我试过用嵌套的 foreachs 来做这件事,并用计数器等把自己逼疯了。
我到了一定程度,无法将匹配项与非匹配项区分开来。
(惊讶于没有内置函数?in_array 和 array_intersect 似乎只用于单个值,而不是集合?)
$haystack = array('a','b','a','b','c','d','a','b','c');
$needle = array('a','b','c');
$CountH = count($haystack); echo $CountH."<br/>";
$CountN = count($needle); echo $CountN."<br/>";
$matches ='';
foreach ($haystack as $key1=>$haystackval){
foreach ($needle as $key2=>$needleval) {
$fail = '0';
//if (in_array($needleval, $haystack)) {
if ($key2[$needleval] === $haystackval && $fail === '0') {
echo "Got needleval - ".$needleval ."<br/>";
}
else { $fail='1';
}
}
}
【问题讨论】:
-
大海捞针的每个元素都是一个字符吗?
-
这有点过于具体,无法作为内置函数。您能向我们展示一些您尝试自己编写的代码吗?否则,这只是您要求代码的情况,而这并不是 SO 的真正用途
-
啊,有限状态自动机的一个很好的例子。
-
@Pudge601 - 我会为你更新。
-
@Jack - 不,它的范围可能从单个字符到 20 个字符......因此你可以看到“a bbbbbbbbb ccccc dddddddddddddddddddd”