【问题标题】:How to split a string with dynamic integer delimiter inside this string in PHP?如何在 PHP 中用动态整数分隔符在这个字符串中分割一个字符串?
【发布时间】:2014-09-11 10:27:23
【问题描述】:

十六进制字符串如下:

$hexString = "0307wordone0Banotherword0Dsomeotherword";

$wordsCount= hexdec(substr($hexString , 0, 2));

第一个字节 (03) 是字符串中的总字数。下一个字节是第一个字的字符数 (07)。在 7 个字节之后,还有一个整数 0B,它表示下一个字长是 11 (0B) 个字符,依此类推...

将这样的字符串分解为数组的函数应该是什么样的?我们知道$wordsCount 应该有多少次迭代。我尝试了不同的方法,但似乎没有任何效果。

【问题讨论】:

  • 使用实际整数可能更有效。有了这个,您的字数限制为 255,而您可以支持 16 位整数的字数/字符数。
  • @Flosculus - 我确定每个单词都小于 8 位。

标签: php string explode


【解决方案1】:

这可以通过 O(n) 中的简单 for 循环来解析。不需要一些花哨(和缓慢)的正则表达式解决方案。

$hexString = "0307wordone0Banotherword0Dsomeotherword";
$wordsCount = hexdec(substr($hexString, 0, 2));
$arr = [];
for ($i = 0, $pos = 2; $i < $wordsCount; $i++) {
    $length = hexdec(substr($hexString, $pos, 2));
    $arr[] = substr($hexString, $pos + 2, $length);
    $pos += 2 + $length;
}
var_dump($arr);

【讨论】:

  • 那行得通。我只需要更改 $lenght*2 因为我没有提到单词是十六进制的 ASCII 值。谢谢楼主!
【解决方案2】:

您可以通过使用 for 循环迭代字符串上的指针来解决此问题。

$hexString = "0307wordone0Banotherword0Dsomeotherword";

$wordsCount= hexdec(substr($hexString , 0, 2));
$pointer = 2;
for($i = 0; $i<$wordsCount;$i++)
{
    $charCount =hexdec(substr($hexString , $pointer, 2 ));
    $word = substr($hexString , $pointer + 2, $charCount);
    $pointer = $pointer + $charCount + 2;   
    $words[] = $word;
}

print_r($words);

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2021-09-25
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多