(PHP 4, PHP 5, PHP 7)
unpack — Распаковывает данные из бинарной строки
$format
, string $data
)
Распаковывает данные из бинарной строки в массив согласно заданному в
format формату.
Распакованные данные хранятся в ассоциативном массиве. Для осуществления этого необходимо обозначить различные коды форматов и разделить их с помощью слеша "/". Можно также передать замещающий аргумент, с помощью которого каждый ключ массива будет иметь порядковый номер после обозначенного имени ключа.
formatСм. функцию pack() для разъяснения кодов форматов.
dataУпакованные данные.
Возвращает ассоциативный массив, содержащий распакованные элементы бинарной строки.
| Версия | Описание |
|---|---|
| 5.5.0 |
Для поддержания совместимости с Perl сделано следующее: Код "a" теперь сохраняет завершающие NULL байты. Код "A" теперь удаляет все завершающие ASCII пробельные символы (пробелы, табуляцию, переносы строк, возврат каретки, и NULL байты). Код "Z" добавлен для NULL-дополненными строками, и удаляет завершающие NULL байты. |
Пример #1 Пример использования unpack()
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
Результат выполнения данного примера:
Array
(
[chars] => 4
[int] => 160
)
Пример #2 Пример использования unpack() с замещающим аргументом
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
Результат выполнения данного примера:
Array
(
[chars1] => 4
[chars2] => 0
[int] => 40960
)
Необходимо отметить, что PHP хранит значения как signed. Если распаковать large unsigned long и оно будет иметь тот же размер, что и хранимое PHP значение, то результатом будет отрицательное число, даже если было указано распаковывать как unsigned.
Если не обозначить элемент, то будут использованы числовые индексы начиная с 1. Если не обозначить более чем один элемент, то это значит, что некоторые данные будут перезаписаны, так как нумерация стартует с 1 для каждого такого элемента.
Пример #3 Пример использования unpack() с безымянными ключами
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
Результат выполнения данного примера:
array(2) {
[1]=>
int(160)
[2]=>
int(66)
}
Обратите внимание, что первое значение из спецификатора c перезаписывается первым значением из спецификатора n.