$a = array(a,b,c,d,e,f,g,h,i,j,k,l);
将$a这个数组中的元素分成6个一组,计算出他们的组合结果,如:
abcdef
abcdeg
abcdeh
abcdei
abcdej
abcdek
abcdel
abcdfg
abcdfh
......
请高手们帮帮忙。

解决方案 »

  1.   

    不能重复,如果重复可以用array_unique处理就可以了。
      

  2.   

    /**
     * 函数 combination
     * 功能 m取n的组合函数
     **/
    if(! function_exists('combination')):
    function combination($ar, $k, $m=0, $a=array()) {
            static $ret = array();
            if($m == 0) {
                    $m = count($ar);
                    $ret = array();
            }
            for($i=$m; $i>=$k; $i--) {
                    $a[$k-1] = $ar[$i-1];
                    if($k > 1) {
                            combination(&$ar, $k-1, $i-1, $a);
                    }else {
                            array_unshift ($ret, array_reverse($a));
                    }
            }
            return $ret;
    }
    endif;
      

  3.   

    $a = array(a,b,c,d,e,f,g,h,i,j,k,l);
    $ar = combination($a, 6);
      

  4.   

    本帖最后由 xuzuning 于 2010-02-04 11:26:36 编辑
      

  5.   

    弄了半天也不对,气死我了,不搞了!<?php
    static $a = array(a,b,c,d,e,f,g,h,i,j,k,l);
    $max = count($a);
    $n = 6;
    $work = array(0,1,2,3,4,5);$complated = false;
    do
    {
    for ($i=0; $i<count($work); $i++)
    {
    echo $a[$i];
    }
    echo "<br \>";
    $j=count($work)-1;
    while($j>0 && $work[$j]>=count($a)-count($work)+$j)
    {
    $j--;
    }
    if ($j >= 0)
    {
    ++$work[$j];
    for ($k=$j+1; $k<count($work); $k++)
    {
    $wokr[$k] = $work[$j]+$k - $j;
    }
    }
    else
    {
    $complated = true;
    }}while(!$complated);?>