Антон Неверов, группировка по максимальному количеству людей в сущности. Т.е. как такогого параметра для группировки нет, т.е. нужно группировать по максимальному количеству элементов, конкретно в данном примере это количество - 2
Извиняюсь, наверно неправильно выразился. Никита правильно сказал - правые. Я написал предысторию, где описал, что если 7й(8й по счёту) бит равен 1, то он обрезается.
Немного поясню свои слова, воможно и тут неправильно написал и запутал... 7й бит - 8й по счету,
по индеку - 0й, 1й...7й
по счету - 1й, 2й...8й
рабочий пример
10010001 = 0010001
самый левый = 1, обрезается и идет дальше
11000111 = 1000111
самый левый = 1, обрезается и идет дальше 00000010 = 00000010
самый левый = 0, не обрезается, формирование заканчивается = 0000001010001110010001 в десятичной 41873
Но разработчики выпустили новый комплект карт и начали появляться вот такое значения
11100011 10000000
тут уже идет ругой ID, что из примера выше
10010001
11000111
00000010
....
и когда скрипт встречает такое, он
11100011 = 1100011
самый левый = 1, обрезается и идет дальше
10000000 = 0000000
самый левый = 1, обрезается и идет дальше
....Хотя тут уже должно было закончиться формирование ID(т.к. дальше точно идет правильный id) и начаться процесс формирования следующего ID вместо этого он продолжает и затрагивает следующие карты 10010001 и тд, т.е. создает большое число из 2х ID, которое конечно же не является уже корректным
10000000 - такое значение встречается несколько раз в одной колоде, возможно оно является каким-то флагом..
Есть карточная игра и её разработчики придумали недавно выпустили патч, в котором можно колоду сконвертировать в строку и например скинуть другу, друг копирует и в игре вставив этот код - получает готовую колоду, т.е. руками он не выбирает карты. В строке хранится информация про формат, какие карты туда входят и в каком количестве и еще немного ненужной инфы, так вот код примерно выглядит так AAECAf0GCpHHAuO+ArEI5MIClMcCMJG8AsQI68IC5QcKvLYC9wTUswKnCLSsAtkH4wXQBM4HwggA
Мне нужно получить ID карт которые вшиты в этот строку.
Вначале я эту строку перегоняю через base64_decode получаю строку из ASCII символов, дальше каждый символ в цикле перебираю и из символа получаю ASCII код(00000010 и тп), в зависимости от символа.
И отсюда я уже взял часть массива.
Дело в том что раньше код отлично работал, если например в массиве присутствовали слудеющие 3 байта:
10010001
11000111
00000010
методом проб и ошибок я выявил, что чтобы получить ID карты нужно удалить 7й бит(если он равен 1) и пристыковать следующий, если и у него 7й бит = 1 - удаляется 7й бит и пристыковывается следующий и так пока 7й бит не будет равен 0 - в итоге имеем 0000001010001110010001, если это дело перевести с двоичного в десятичное получается 41873, что как-раз и является ID одной из карт в колоде, и такая магия проделывается по очереди с каждым элементом массива. Все работало до того момента пока а колоду не вошли карты из одного нового комплекта. Отсюда и эти 2 значения
11100011
10000000
Методом который я описал выше, скрипт просто видит 10000000 вырезает 7й бит и берет следующий элемент и дальше все идет коту под хвост.
Метод хранения придумывали разработчики игры, не я. Мне это нужно понять, чтобы по данному коду можно было получить колоду из n количества карт.
Могу немного неправильно выражаться, т.к. совсем слабо разбираюсь в данной теме, если где-то термины попутаю, извиняйте. Не могу сказать точно значит он что-то или нет, могу лишь в общих чертах описать где это все используется и может вы поймете:
декодируем строку
base64_decode("AAECAR8GxwPJBLsFmQfZB/gIDI0B2AGoArUDhwSSBe0G6wfbCe0JgQr+DAA=");
дальше в цикле перебираем эту строку и получаем байты
$byte = sprintf("%08b", ord($c));
в первых 6ти элементах числа от 0-6(00000000, 00000001 ...и тд),
а вот дальше уже:
11000111 - (199)
00000011 - (3)
...
тут нужно было сделать из 2х 8битных - одно 16ти битное число
0000001111000111 - и прогнать через функцию bindec('0000001111000111') которая преобразует двоичное в десятичное - результат 967
дальше оказалось что это не окончательное значение, а чтобы уже получить нужный ID это число нужно перегнать (967 >> 8) << 7 | (967 % 128)
Это уже и будет тот ID который мне нужен. Теперь мне нужно все сделать в обратном направлении - собрать строку которую я декодил в начале. Как-то так :|
Ваше решение отлично работает для моего случая, спасибо.
Спасибо за ответ, но это не совсем то. Необходимо точное совпадение, а если я сейчас добавлю id-4 IN (2,3,4) то мне все равно вернет и deck 1 и deck 2, а должен вернуть уже только deck 2, потому что у 1го набора карты 4 нет.
Все таки решил выполнять N интераций и перенаправлять на эту же страницу с параметрами(на какой записе остановился), потом вырезать отработанное количество элементов и опять выполнять N итераций...ну и так по кругу пока не дойду до конца массива.