Ваше ключевое требование здесь состоит в том, чтобы процесс повторялся . Это может выглядеть случайным для человека, но процесс определения того, в какой «сегмент» попадает каждый элемент, очень нуждается в стабильности.
То, что вы ищете (как люди упоминали в комментариях): функция хеширования, которая выдаст одну из 10 ключей - необходимое вам количество сегментов. Самый простой способ сделать это с помощью PHP - это взять остаток от crc32
га sh мод 10:
$key = crc32($string) % 10;
Затем вы можете назначить элемент к этому сегменту в выводе:
$buckets = [];
foreach ($strings as $string) {
$key = crc32($string) % 10;
$buckets[$key][] = $string;
}
См. https://3v4l.org/enEEV
Результаты не идеальны ни при каких условиях (в этом примере сегменты имеют От 5 до 14 элементов), но он будет выровнен с большими входными размерами. Подсчет ведра для 30 000 элементов выглядит следующим образом:
0 - 3099
1 - 3085
2 - 2930
3 - 2975
4 - 2983
5 - 2969
6 - 2981
7 - 2987
8 - 2921
9 - 3070