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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽