Допустим, у нас есть эти массивы:Сравнение массивов и компактным, если в том же порядке
$a = array("B", "C", "D", "E");
$b = array("A", "B" , "C", "D", "E", "F", "G", "H", "I");
Тогда я хочу, чтобы проверить, является ли последовательность к югу от $a
последовательна в $b
. Если да, и это более трех элементов, я хочу вывести их с тире, например. 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, который проверяет значения как в массивах, так и в наборах указателей, а затем сравнивает с указателями. Это было слишком сложно, и теперь у меня болит голова.
Я чувствую, что мне не хватает чего-то очевидного, и это очень простая вещь.
Редактировать: Вот мой текущий прогресс.
$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);
Edit 2: Значения являются не только буквы. Они являются строками и могут иметь разную длину. («AA», «b», «lk»).
* Я пробовал некоторые сумасшедшие Еогеасп * Покажите нам, что сумасшедший код, и мы покажем вы, как заставить этот сумасшедший код работать – Rizier123
Непонятно, что именно вы хотите, хотите ли вы пропустить любое конкретное значение или несколько значений? быть очень ясным, пожалуйста, – M3ghana
@ Rizier123 Я добавил код, который я пытался сделать после того, как я сдался на петлях. – Cheppa