提问人:Vitor Brussi 提问时间:8/3/2022 最后编辑:mickmackusaVitor Brussi 更新时间:8/4/2022 访问量:35
查找符合条件的子集并返回紧随其后的值
Find qualifying subsets and return value that immediately follows
问:
有人可以帮我一个函数来比较另一个数组中是否有数组,并在每次找到这个数组时返回下一个项目吗?
例如
$array1 = [0,0,0,1,1,0,1,1,0,0,1,1,0,0,1];
$array2 = [1,1,0];
在这种情况下,元素的确切序列被找到 3 次。$array2
序列后面的值为:
- 第一个组合 =
1
- 第 2 种组合 =
0
- 第 3 个组合 =
0
可视化:
标记序列匹配,标记应返回的值。|---|
^
0,0,0,1,1,0,1,1,0,0,1,1,0,0,1
|---| ^
|---| ^
|---| ^
答:
1赞
mickmackusa
8/3/2022
#1
我认为将数据读取为字符串比以当前数组形式迭代元素更简单。
只需使用后溯模式并匹配下一个出现的整数即可。
$haystack = [0,0,0,1,1,0,1,1,0,0,1,1,0,0,1];
$needle = [1,1,0];
$regex = sprintf(
'/(?<=%s,)\d+/',
implode(',', $needle)
);
var_export(
preg_match_all($regex, implode(',', $haystack), $m)
? $m[0]
: []
);
输出:
array (
0 => '1',
1 => '0',
2 => '0',
)
或者以数组形式处理数据的方法,可以进行迭代调用以获得相同的结果。(演示array_slice()
)
$needleCount = count($needle);
$result = [];
foreach ($haystack as $i => $straw) {
$start = $i - $needleCount;
if (
$start >= 0
&& $needle === array_slice($haystack, $start, $needleCount)
) {
$result[] = $straw;
}
}
评论