【发布时间】:2015-11-05 04:12:41
【问题描述】:
假设我们有这些数组:
$a = array("B", "C", "D", "E");
$b = array("A", "B" , "C", "D", "E", "F", "G", "H", "I");
然后我想检查来自$a 的子序列是否在$b 中是连续的。如果是并且超过 3 个元素,我想用破折号输出它们,例如X-Y。在所有其他情况下,我只想打印出逗号分隔的值。
因此,上述$a 数组的预期输出为:
B-E
另一个例子:
$a = array("B", "C", "D", "F", "H");
//Same $b array to check if a sub sequence of $a appears in $b consecutive
预期输出:
B-D, F, H
我在 foreach 循环中尝试了一些疯狂的 foreach,它检查两个数组中的值并设置指针,然后比较指针。感觉太复杂了,现在我头疼。
我觉得我错过了一些明显的东西,这是超级简单的事情。
编辑:这是我目前的进度。
$pointer = count($b);
$a = array("B", "C" , "D", "E");
$b = array("A", "B", "C" , "D", "E", "F", "G");
foreach ($b as $key => $bb) {
if ($a[0] == $bb) {
$pointer = $key;
}
}
$d = array();
$d[] = $a[0];
foreach ($a as $key => $aa) {
if ($aa == $b[$pointer+$key]) {
$pointer = $key;
} else {
$d[] = "-".$aa;
$pointer++;
}
}
echo implode('',$d);
编辑 2: 这些值不仅仅是字母。它们是字符串,可以有不同的长度。 (“AA”、“b”、“lk”)例如。
【问题讨论】:
-
我尝试了一些疯狂的 foreach 向我们展示疯狂的代码,我们将向你展示如何让疯狂的代码工作
-
不清楚你到底想要什么,你想跳过任何特定的值还是几个值?请说清楚
-
@Rizier123 我添加了我在放弃循环后尝试制作的代码。
-
@M3ghana 我以为我很清楚。如果第一个数组在第二个数组($a 和 $b)中以相同的顺序在某个点具有相同的值,则您只显示数组中的第一个和最后一个值。如果第一个数组跳过了第二个数组中的一些值,它仍应以相同的方式显示这些值,但单独列出奇数。可能有一个词可以描述这一点,但我不知道。
-
仅供参考:您可以接受对您帮助最大并解决了您的问题的答案 (meta.stackexchange.com/q/5234)
标签: php arrays loops for-loop foreach