Estoy tratando de separar una cadena muy larga cuya etiqueta de inicio es 2424 ... Esta es una función donde lo está haciendo

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 tiene una cadena hexadecimal muy larga ... EL PROBLEMA ES en lugar de solo separar la cadena que comienza con 2424 ... divide cualquier cosa que comience con 2 o 4. Ejemplo: 24246778672552dd455 Da: 4677867, 55, dd, 55 Lo que quiero es 6778672552dd455 en una cadena hasta el próximo 2424.Cualquier solución mejor sería útil.

0
Muhammad Bilal 16 oct. 2018 a las 17:08

2 respuestas

La mejor respuesta

Una forma sencilla sería utilizar explode() con 2424 como delimitador. Luego puede verificar si el primer elemento está vacío (por lo que no hay nada antes del primer 2424) y hay más de 1 elemento (usando count()) ...

$test = "24246778672552dd4552424a123";

$results = explode("2424", $test);
if ( empty($results[0]) && count($results) > 1 )   {
    //found
    array_shift($results);   // Remove empty element
    print_r($results);
}

Salidas ...

Array
(
    [0] => 6778672552dd455
    [1] => a123
)

El problema con strtok() es que dividirá la cadena según en CUALQUIERA de los caracteres de su cadena, por lo que se dividirá en 2 o 4 y no en 2424. Del manual ...

strtok () divide una cadena (str) en cadenas más pequeñas (tokens), con cada token está delimitado por cualquier carácter del token.

1
Nigel Ren 16 oct. 2018 a las 14:22

Puede usar preg_split para dividir sus datos en matrices.

$hex = '24246778672552dd45524248763257490823508lale9794382';
$hexarray = preg_split("/(2424)/", $hex);
print_r($hexarray);

// expected result
// Array ( [0] => [1] => 6778672552dd455 [2] => 8763257490823508lale9794382 )
1
Tien 16 oct. 2018 a las 14:18