【问题标题】:Divide randomly generated ids into equal groups将随机生成的 id 分成相等的组
【发布时间】:2014-11-13 14:59:51
【问题描述】:

我正在使用 php 并生成类似用户的 ID

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

我想将这些 id 分成相等(或几乎相等)的组。以后我想知道用户属于哪个组。

有什么想法吗?我可以为此选择什么标准?

【问题讨论】:

  • 请向我们展示您到目前为止所做的尝试。我不懂你的问题。你是什​​么意思,平等的群体?
  • 您的预期输出如何?给我们看一些例子……
  • 例如,如果我在 mysql 中有自动增量字段,我可以执行类似 $userGroup = $id%2; 的操作它将所有用户分成两个相等的组
  • 恐怕这对我不起作用。如果我有一个新用户,我想知道他是否位于现有组的第一个或第二个组中

标签: php random grouping divide


【解决方案1】:

我发现了一种分辨率的变体。但也许还有另一种更漂亮的方式......

$group = array_sum(str_split($id))%2;

【讨论】:

    【解决方案2】:

    好的,这是一个粗略且现成的答案;由于没有给出您希望排序的实际标准,我假设主要目标是在您选择的容器中均匀分布变量;我在这里使用了数组。

    <?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";
                } 
        }       
    ?> 
    

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 2016-02-20
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多