Буду тестировать пока этот. Конечно заметил , что постоянство индексов имеется, но эт группы, но участники ведь "случайные". Тут главное именно это. Не повторение индекса группы, и какой то уровень случайности выбора фамилии.
как раз из-за специфичной сложности, я и перешел от полного рандома, к последовательному вычленению первых элементов каждой группы, перераспределению ключей внутри групп, и повтору итерации. но не понимаю как работать с массивом в котором я делал array_shift, после первой итерации. либо он берет исходный, либо я ухожу в безконечный цикл...( (Добавление)
Повторюсь, вполне допускаю возможность работы не с массивом групп пользователей, а с массивом пользователей у которых есть индекс группы :
Не знаю как это может облегчить задачу перебора массива и выведение алгоритма. Я пробовал такой массив разбивать через array_chunk($array, 2) и затем проверять равенство индексов групп, и если не равны, то делать
где $list - массив в который собирал нормальные пары, а $array[0]- элемент с парой после разделения по 2,
но не получилось создать адекватный цикл для проверки, не хватило знаний по работе с массивами видимо. Не понимаю видимо полностью как работают unset и array_shift...
Может работая с таким общим массивом попроще будет?
в том и проблема( если бы группы было точно 2, можно было бы просто сделать два массива и поочереди совместить их элементы.
сложность как раз в необходимости работы с несколькими группами. есть вероятность что групп будет блльше чем их участников. скажем около 7 групп, по 3 участника в каждой
я допускаю что я ошибаюсь в подходе сортировки.
главная цель - из общего списка пользователей, сгруппировать пары из пользователй разных групп случайным образом.
пользователей будет примерно поровну, может быть нечетное кл-во(т.е. 1 может остаться без пары (последний) ).
рандомизацию делал сортируя пользоватей внутри групп методом shuffle() .
дошел до прямого перебора так как не смог реализовать дейсвительно случайную парную группмровку.
можете подсказаль алгоритм ?
В каждом массиве групп, может быть разное количество пользователей, можете привести пример ?
Я пришел к выводу что необходимо переносить первого пользователя группы в новый массив, и удалять его из родительского, и переиндексировать массив родитель, но не получается реализовать все в 1 цикл...
Первый уровень массивов - это группы( 0,1,...) , в каждой группе записаны пользователи ( 0,1,2).
У каждого пользователя два свойства: 0-это ключ группы, 1- это его имя.
Необходимо перебрать массив так, чтобы они выстроились без повторения двух индексов групп подряд, в 1 список(одномерный массив).
Подскажите ! Уже перебробовал и делать array_chunk($array,2) и сравнивать индексы в паре и переносить в другой массив, но не понял как сделать прерывание цикла, И пробовал просто пробегать по первым элементам массивов , и делать unset, или array_shift первым элементам после переноса их в новый массив-список, но не получается...
необходимо собрать все в список (одномерный массив) , чтобы ключи "key" никогда не повторились подряд (если конечно общее число четное)
Пытаюсь написать с перебором массива foreach($array as $arr), и присвоения первого элемента через $arg[] = array_shift($arr); ... но присваевает лишь единожды.