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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 13:32
300 руб./за проект
24 апр. 2024, в 13:10
400000 руб./за проект