Я пытаюсь отделить очень длинную строку, начальный тег которой 2424 …
Это функция, где это делает
protected function StartTagCheckAndNeglect($hex)
{
try {
$token = strtok($hex, "2424");
while ($token !== false) {
echo "$token<br>";
$token = strtok("(2424)");
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
$ hex имеет очень длинную шестнадцатеричную строку …ПРОБЛЕМА В вместо только разделяющей строки, которая начинается с 2424 …. она разделяет любую вещь, которая начинается с 2 или 4.
Пример: 24246778672552dd455
Дает: 4677867,
55,
дд,
55
То, что я хочу, это 6778672552dd455 в одной строке до следующих 2424. Любое лучшее решение будет полезно.
Простой способ будет использовать explode()
с 2424 в качестве разделителя. Затем вы можете проверить, является ли первый элемент пустым (так что нет ничего до первых 2424) и существует ли более 1 элемента (используя count()
) …
$test = "24246778672552dd4552424a123";
$results = explode("2424", $test);
if ( empty($results[0]) && count($results) > 1 ) {
//found
array_shift($results); // Remove empty element
print_r($results);
}
выходы …
Array
(
[0] => 6778672552dd455
[1] => a123
)
Проблема с strtok()
является то, что он будет разбивать строку на основе ЛЮБЫХ символов в вашей строке, поэтому он будет делиться на 2 или 4, а не 2424. Из руководства …
strtok () разбивает строку (str) на меньшие строки (токены), с
каждый токен отделяется любым символом от токена.
Вы могли бы просто использовать preg_split
чтобы ваши данные были разбиты на массивы.
$hex = '24246778672552dd45524248763257490823508lale9794382';
$hexarray = preg_split("/(2424)/", $hex);
print_r($hexarray);
// expected result
// Array ( [0] => [1] => 6778672552dd455 [2] => 8763257490823508lale9794382 )