本帖最后由 staryjk 于 2013-05-15 12:58:27 编辑

解决方案 »

  1.   

    样例:1->0
    2->01
    3->01重组后的号码为000,001,010,011,总数为4
      

  2.   

    这个意思?$ar = array(
    '0123',
    '01234',
    '678',
    );print_r(foo($ar));
    function foo(&$ar, $i=0) {
      $res = array();
      if($i+1 <count($ar)) {
         $t = foo($ar, $i+1);
         foreach(str_split($ar[$i]) as $v) {
           foreach($t as $r) $res[] = $v . $r;
         }
      }else $res = str_split($ar[$i]);
      return $res;
    }Array
    (
        [0] => 006
        [1] => 007
        [2] => 008
        [3] => 016
        [4] => 017
        [5] => 018
        [6] => 026
        [7] => 027
        [8] => 028
        [9] => 036
        [10] => 037
        [11] => 038
        [12] => 046
        [13] => 047
        [14] => 048
        [15] => 106
        [16] => 107
        [17] => 108
        [18] => 116
        [19] => 117
        [20] => 118
        [21] => 126
        [22] => 127
        [23] => 128
        [24] => 136
        [25] => 137
        [26] => 138
        [27] => 146
        [28] => 147
        [29] => 148
        [30] => 206
        [31] => 207
        [32] => 208
        [33] => 216
        [34] => 217
        [35] => 218
        [36] => 226
        [37] => 227
        [38] => 228
        [39] => 236
        [40] => 237
        [41] => 238
        [42] => 246
        [43] => 247
        [44] => 248
        [45] => 306
        [46] => 307
        [47] => 308
        [48] => 316
        [49] => 317
        [50] => 318
        [51] => 326
        [52] => 327
        [53] => 328
        [54] => 336
        [55] => 337
        [56] => 338
        [57] => 346
        [58] => 347
        [59] => 348
    )
      

  3.   

    如果不考虑重复问题,这个不就是排列组合了?
    1->0123
    2->01234
    3->678
    总数 = A(4,1)*A(5,1)*A(3,1) = 4*5*3 = 60
      

  4.   

    代码?echo strlen('0123')*strlen('01234')*strlen('678');
    //??这个算最快不?
      

  5.   

    <?php$array = array('111','111','11111');
    //echo strlen($arrar[0]);
     function zuhe($array){
        
        foreach ($array as $value) {
            if (strlen($value)) {
                $sum[] = strlen($value);
            }
        }    $i = 0;
        print_r($sum);
        $total =1;
        while ($sum[$i]) {
            $total = $total * $sum[$i];
            $i++;
        }
        echo $total;
     }
    zuhe($array);
    ?>
      

  6.   

    噢!只要计算组合数啊?!我还以为要求所有的组合呢
    $ar = array('0123456789', '0123456789', '01234');
    echo array_product(array_map('strlen', $ar));
      

  7.   

    看来我还是要多看PHP手册,又被xu版大人秒杀了。
      

  8.   

    发现数组中一个奇怪的问题,不知道是不是我写的有问题.
    $strArr = array(
        1 => 0, 3 => 1, 6 => 2, 10 => 3, 15 => 4, 21 => 5, 28 => 6, 36 => 7, 45 => 8,
        55 => 9, 63 => 10, 69 => 11, 73 => 12, 75 => 13, 75 => 14, 73 => 15, 69 => 16,
        63 => 17, 55 => 18, 45 => 19, 36 => 20, 28 => 21, 21 => 22, 15 => 23, 10 => 24, 6 => 25,
        3 => 26, 1 => 27);echo $str = '1,2,3,6,7,25,23,15,18'."\n";
    $sArr = explode(',',$str);
    foreach($sArr as $v){
        echo array_search($v,$strArr)."\n";
    }
    结果:1,2,3,6,7,25,23,15,186
    15
    73
    55
    Array
    (
        [1] => 27
        [3] => 26
        [6] => 25
        [10] => 24
        [15] => 23
        [21] => 22
        [28] => 21
        [36] => 20
        [45] => 19
        [55] => 18
        [63] => 17
        [69] => 16
        [73] => 15
        [75] => 14
    )
    我的0-13的这个怎么都没有了???
      

  9.   

    你的 $strArr 数组键名重复了,因此后面的覆盖前面的。print_r($strArr); 就知道了。
      

  10.   

    $strArr = array(
       1 => 0,
       3 => 1,
       6 => 2,
      10 => 3,
      15 => 4,
      21 => 5,
      28 => 6,
      36 => 7,
      45 => 8,
      55 => 9,
      63 => 10,
      69 => 11,
      73 => 12,
      75 => 13,
      75 => 14,
      73 => 15,
      69 => 16,
      63 => 17,
      55 => 18,
      45 => 19,
      36 => 20,
      28 => 21,
      21 => 22,
      15 => 23,
      10 => 24,
       6 => 25,
       3 => 26,
       1 => 27
    );
    套红的下标将覆盖上面已有的下标