Разделите случайно сгенерированные идентификаторы на равные группы

Я использую php и генерирую идентификатор пользователя, например

 $id = bin2hex(openssl_random_pseudo_bytes(16, $s));

И я хотел бы разделить эти идентификаторы на равные (или почти равные) группы. И в будущем хотелось бы знать, к какой группе принадлежит пользователь.

Любые идеи? Какие критерии я могу выбрать для этого?


person Dmitriy Apollonin    schedule 13.11.2014    source источник
comment
Пожалуйста, покажите нам, что вы пробовали до сих пор. Я не понимаю вашего вопроса. Что значит равные группы?   -  person vaso123    schedule 13.11.2014
comment
Каков ваш ожидаемый результат? Покажите нам несколько примеров ...   -  person giordanolima    schedule 13.11.2014
comment
например, если у меня есть поле автоматического увеличения в mysql, я мог бы сделать что-то вроде $ userGroup = $ id% 2; он разделит всех пользователей на две равные группы   -  person Dmitriy Apollonin    schedule 13.11.2014
comment
А что насчет array_chunk? php.net/manual/pt_BR/function.array-chunk.php   -  person giordanolima    schedule 13.11.2014
comment
Боюсь, у меня это не сработает. если у меня есть новый пользователь, я хочу знать, находится ли он в первой или второй из уже существующих групп   -  person Dmitriy Apollonin    schedule 13.11.2014


Ответы (2)


Нашел один вариант разрешения. Но, может быть, есть другой, более красивый способ ...

$group = array_sum(str_split($id))%2;
person Dmitriy Apollonin    schedule 13.11.2014

Хорошо, это грубый и готовый ответ; поскольку фактические критерии, по которым вы хотите выполнить сортировку, не указаны, я предполагаю, что основная цель - равномерное распределение переменных между выбранным вами контейнером; Я использовал здесь массивы.

<?php


  $id1 = 'abc';
  $id2 = 'def';
  $id3 = 'ghi';
  $id4 = 'jk';
  $id5 = 'lmn';
  $id6 = 'opq';
  $id7 = 'rst';
  $id8 = 'uvx';

  $id_array = array($id1, $id2, $id3, $id4, $id5, $id6, $id7, $id8);

  $array1 = array();
  $array2 = array();
  $array3 = array();
  $array4 = array();
  $id_storage = array($array1, $array2, $array3, $array4);

  $id_storage_size = sizeOf($id_storage);


  foreach ($id_array as $indivId) {
          $id_array_size = sizeOf($id_array);

          $current_storage_array = $id_array_size % $id_storage_size; 
          $id_storage[$current_storage_array][] = $indivId;
          array_shift($id_array);
  }  


  //check them like so...
  echo $id_storage[1][1];


?>

Что касается проверки того, какой массив содержит данное значение:

<?php

    $givenId = $id2;

    foreach ($id_storage as $indiv_storage_array){

            if (in_array($givenId, $indiv_storage_array)){
                  echo "Match found in $indiv_storage_array";
            } 
    }       
?> 
person Hektor    schedule 13.11.2014