向高手们求助一个算法有数组:
$arr=array(A,B,C);
要求输出:
A
AB
AC
ABC
B
BA
BC
C
CA
CB就是要输出数组元素的所有组合,顺序不要求,只要求能全部输入就可以了算法

解决方案 »

  1.   

    上面还要输出一个ACB,BAC,BCA,CAB,CBA也就是
    Array ( [0] => A [1] => AB [2] => AC [3] => ABC [4] => ACB [5] => B [6] => BA [7] => BC [8] => BAC [9] => BCA [10] => C [11] => CA [12] => CB [13] => CBA [14] => CAB ) 
      

  2.   

    $ar = array('A', 'B', 'C');$res = array_chunk($ar, 1);
    for($i=1; $i<count($ar); $i++) {
      foreach($res as $r) {
        if(count($r) != $i) continue;
        foreach($ar as $v) {
          if(! in_array($v, $r)) $res[] = array_merge($r, array($v));
        }
      }
    }
    //print_r($res);
    foreach($res as &$r) $r = join('', $r);
    print_r($res);Array
    (
        [0] => A
        [1] => B
        [2] => C
        [3] => AB
        [4] => AC
        [5] => BA
        [6] => BC
        [7] => CA
        [8] => CB
        [9] => ABC
        [10] => ACB
        [11] => BAC
        [12] => BCA
        [13] => CAB
        [14] => CBA
    )
      

  3.   

    <?php
    $ar=array(A,B,C);
    function foo($ar,$m,$s='') {
    global $global_arr;//命名全局变量
    if (!empty($s)) $global_arr[]=$s;
    if($m > 0) {
     for($i=0;$i<count($ar);$i++) {
     if (!strstr($s,$ar[$i])) foo($ar,$m-1,$s.$ar[$i]); //递归
        }
      }
    }
    foo($ar,count($ar));
    print_r($global_arr);//输出结果
    ?>