GreenMan1899: вам важно 1:1 соответствие разбивки тому, как это получилось в браузере? Или различие приемлемо: скажем, союз «а» в браузере перенесся на следующую строку, а в массиве он ещё остался в предыдущей?
MUTOgen4eg: аа, теперь понятно! Извините, невнимательно прочитал исходную ссылку в вопросе. В самом PHP такой функции нет, но алгоритм легко реализуется, можно взять готовое решение, например, axypro/codecs-base64vlq.
MUTOgen4eg: ну вот C#-вариант выдаёт всего 16 байт. На PHP если вы жмёте "1" как 32 бита, "0" как 32, и т.д. – длина получается намного больше. Есть подозрение, что всё же выделяется 1 бит на "1", 1 бит на "0", 3 бита на heroes и т.п. Может такое быть?
MUTOgen4eg: во втором, «правильном» варианте у вас записано всего 16 байт. В коде вы не привели функцию countCards(). поэтому сложно судить о том, что там подаётся на вход.
MUTOgen4eg: так вам base64 кодирование нужно? base64_encode(): сначала pack'ом перевести ваше сверхдлинное число в бинарную строку, а её закодировать base64_encode().
Ingernirated: наверное, у вас включен strict mode. В нём обязательно должна быть определена переменная. С несуществующими свойствами объекта такой проблемы нет.