Определите, содержит ли строка последовательность чисел

Скажи у меня есть целое число 88123401, и я хочу определить, включает ли он последовательность чисел, таких как 1234, 23456, 456789, или тому подобное любой длины и из любого начала чисел. Возможно ли это вообще в PHP, и если да, то как бы поступить о выяснении?

1

Решение

Некоторая функция с for позволяет пройти через всю строку, сравнивая каждый символ с его предшественником.

function doesStringContainChain($str, $n_chained_expected)
{
$chained = 1;

for($i=1; $i<strlen($str); $i++)
{
if($str[$i] == ($str[$i-1] + 1))
{
$chained++;
if($chained >= $n_chained_expected)
return true;
}else{
$chained = 1;
}
}
return false;
}

doesStringContainChain("6245679",4); //true
doesStringContainChain("6245679",5); //false
3

Другие решения

используйте цикл и используйте ответ @jtheman

$mystring = '88123401';
$findme   = array(123,2345,34567);
foreach ( $findme as $findspecificnum ) {
$pos = strpos($mystring, $findme);

if ($pos === false) {
echo "The sequence '$findme' was not found in the number '$mystring'";
} else {
echo "The sequence '$findme' was found in the number '$mystring'";
echo " and exists at position $pos";
}
}

держать это легко и прямо.

2

Обрабатывайте число как строку и ищите strpos(),

Пример:

$mystring = '88123401';
$findme   = '1234';
$pos = strpos($mystring, $findme);if ($pos === false) {
echo "The sequence '$findme' was not found in the number '$mystring'";
} else {
echo "The sequence '$findme' was found in the number '$mystring'";
echo " and exists at position $pos";
}

Источник: http://php.net/manual/en/function.strpos.php

0

Это может помочь вам:

$number = "88123401";

$splittedNumbers = str_split($number);
$continuous = false;
$matches[0] = '';
$i = 0;

do {
if ((int)(current($splittedNumbers) + 1) === (int)next($splittedNumbers)) {
if($continuous) {
$matches[$i] .= current($splittedNumbers);
}
else {
$matches[$i] .= prev($splittedNumbers) . next($splittedNumbers);
$continuous = true;
}
} else {
$continuous = false;
$matches[++$i] = '';
}
prev($splittedNumbers);
} while (!(next($splittedNumbers) === false));

print_r(array_values(array_filter($matches)));

В этом списке перечислены все совпадения, которые являются последовательными в массиве. Мы можем обрабатывать дальше, основываясь на результатах.

Результат:

Array
(
[0] => 1234
[1] => 01
)
0
По вопросам рекламы [email protected]