我们如何仅通过PHP的起始字符来分隔字符串

时间:2018-10-16 14:08:32

标签: php hex explode strtok

我正在尝试分隔一个很长的字符串,其起始标签为2424 ... 这个功能在起作用

using (var db = new ContextoDB())
{
    var estado = await db.EstadosPorDispositivos
    .Where(e => e.DipositivoID == this.DispositivoID)
    .OrderByDescending(e => e.EstadoPorDispositivosID)
    .FirstOrDefaultAsync()
    .ConfigureAwait(false)
}

$ hex的十六进制字符串很长... 问题,而不是仅以2424开头的分隔字符串。...它拆分了任何以2或4开头的东西。 示例:24246778672552dd455 它给出了:4677867, 55岁 dd 55 我想要的是一个字符串中的6778672552dd455,直到下一个2424。任何更好的解决方案都会有所帮助。

2 个答案:

答案 0 :(得分:1)

您可以只使用preg_split将数据拆分为数组。

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

// expected result
// Array ( [0] => [1] => 6778672552dd455 [2] => 8763257490823508lale9794382 )

答案 1 :(得分:1)

一种简单的方法是将explode()与2424用作分隔符。然后,您可以检查第一个元素是否为空(因此第一个2424之前没有任何内容)并且有不止一个元素(使用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)拆分为较小的字符串(令牌),   每个令牌都由令牌中的任何字符分隔。