为什么Unpack函数返回PHP中起始索引为1的数组

时间:2013-12-23 15:39:47

标签: php

为什么PHP中的unpack()函数返回以数组索引1开头的二进制数据数组。

$str = "PHP";
$binary_data = unpack("C*",$str);
print_r($binary_data);

上面的PHP脚本打印如下:

数组([1] => 80 [2] => 72 [3] => 80)

1 个答案:

答案 0 :(得分:6)

数组是带有命名键的关联数组,而不是带数字键的常规数组。我们的想法是,您将为每个格式代码命名,结果数组将使用这些名称作为数组键。

例如:

<?php
$str = "PHP";
$binary_data = unpack("C*letter",$str);
print_r($binary_data);

结果:

Array
(
    [letter1] => 80
    [letter2] => 72
    [letter3] => 80
)

来自PHP manual

  

解压缩的数据存储在关联数组中。要完成此操作,您必须命名不同的格式代码,并用斜杠/分隔它们。如果存在转发器参数,则每个数组键将具有给定名称后面的序列号。

     

示例#1 unpack()示例

<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
?>
     

结果数组将包含值为4的条目“chars”和160的“int”。

     

示例#2带有转发器的unpack()示例

<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
?>
     

结果数组将包含条目“chars1”,“chars2”和“int”。