gagablik
@gagablik
Начинающий Web разработчик

Как с помощью pack() запаковать массив с string значениями?

// Создаю массив
    $aYearColor = array_fill(0,366,'#FFFFFF');	
    // Запаковываю его
    $aYearColorBlob = pack('a*', ...$aYearColor);
    // Распаковываю
    unpack('a*', $aYearColorBlob);


Но данный способ не сработает. На выходе будет array ( 1 => #FFFFFF );

И ошибка Warning: pack(): 365 arguments unused in ...

Если массив числовой, то проблем нет, всё сработает:

$aYearOrder = array_fill(0,366,0);
    $aYearOrderBlob = pack('i*', ...$aYearOrder);
    unpack('i*', $aYearOrderBlob);

Прочитал, что:

Для a, A, h, H число повторений определяет то, сколько символов взято
от одного аргумента данных


Но не пойму, как тогда добавить такой массив с string значениями и потом обратно его распаковать. Спасибо
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Строка не имеет фиксированной длины, в отличие от остальных типов. pack() не добавляет результат ни длины строк, ни разделители, поэтому результат упаковки строк будет таким же, как если бы вы просто объединили их. Соответственно, 'a*' при упаковке означает "одна строка произвольной длины до конца".
unpack() тоже не сможет автоматически разделить получившуюся строку на исходные подстроки, у него просто не будет для этого ориентиров.
Может вам лучше перейти на JSON или serialize?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы