请教,如何列出26个字母和10个阿拉伯数字组成的三个字符组合?

解决方案 »

  1.   

    老徐(版主)写过这样一个函数
    /*** 组合 ***/
    function combination( $arr, $num=0) {
      $len = count($arr);
      if($num == 0) $num = $len;
      $res = array();
      for($i=1,$n=pow(2, $len);$i<$n;++$i) {
        $tmp = str_pad(base_convert($i, 10, 2), $len, '0', STR_PAD_LEFT);
        $t = array();
        for($j=0;$j<$len;++$j) {
          if($tmp{$j} == '1') {
            $t[] = $arr[$j];
          }
        }
        if(count($t) == $num) $res[] = $t;
      }
      return $res;
    }
      

  2.   

    $arr 由0-9,a-z填充
    很难比这样更快啦for($i=0;$i<36;$i++)
    {
    for($j=0;$j<36;$j++)
    {
    for($l=0;$l<36;$l++)
    {
    $arr[$i].$arr[$j].$arr[$l];
    }
    }
    }
      

  3.   

    元素可重复组合用这个,不可重复循环边界微调一下即可很难更快啦for($i=0;$i<36;$i++)
    {
    for($j=$i;$j<36;$j++)
    {
    for($l=$j;$l<36;$l++)
    {
    $arr[$i].$arr[$j].$arr[$l];
    }
    }
    }
      

  4.   

    本帖最后由 xuzuning 于 2012-07-05 14:51:56 编辑
      

  5.   


    前面提了,$arr 由0-9,a-z组成,直观简单的思维,效率非常高的
      

  6.   

    $arr = str_split('abcdefghigklmnopqrstuvwxyz0123456789');
    $len = count($arr);
    $list = array();
    for ($i = 0; $i < $len; $i++) {
        for ($j = 0; $j < $len; $j++) {
            for ($k = 0; $k < $len; $k++) {
                $list[] = $arr[$i] . $arr[$j] . $arr[$k];
            }
        }
    }
    echo '<pre>';print_r($list);