如何在PHP中将此字符串中的动态整数分隔符拆分为字符串?

时间:2014-09-11 10:27:23

标签: php string explode

十六进制字符串如下:

$hexString = "0307wordone0Banotherword0Dsomeotherword";

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

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

将这种字符串扩展到数组的功能应该是什么?我们知道$ wordsCount应该有多少循环。我尝试了不同的方法,但似乎没有任何效果。

2 个答案:

答案 0 :(得分:3)

这可以使用 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);

答案 1 :(得分:0)

你可以通过用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);