从M中取N个就由楼主自己写了。
下面是排列组合的代码。希望对你有用。<?php
$n = array(1,3,5,7,9);
$rs = array();/**
递归函数,参数
$ar 数据数组
$m  组合串的长度
$s  工作变量,用于缓存中间量
**/
function foo($ar,$m,$s='') {
  global $rs;
  if($m == 0) {
    $rs[] = $s; //如果长度够了则赋值
  }else {
    for($i=0;$i<count($ar);$i++) {
      foo($ar,$m-1,$s.$ar[$i]); //递归
    }
  }
}foo($n,2);
print_r($rs);//顺序数组
shuffle( $rs );
print_r($rs);//打乱数组?>

解决方案 »

  1.   

    输出结果,第一个为顺序的全部组合;第二个为打乱的,每次运行可能会不同。Array
    (
        [0] => 11
        [1] => 13
        [2] => 15
        [3] => 17
        [4] => 19
        [5] => 31
        [6] => 33
        [7] => 35
        [8] => 37
        [9] => 39
        [10] => 51
        [11] => 53
        [12] => 55
        [13] => 57
        [14] => 59
        [15] => 71
        [16] => 73
        [17] => 75
        [18] => 77
        [19] => 79
        [20] => 91
        [21] => 93
        [22] => 95
        [23] => 97
        [24] => 99
    )
    Array
    (
        [0] => 97
        [1] => 77
        [2] => 55
        [3] => 57
        [4] => 53
        [5] => 95
        [6] => 19
        [7] => 13
        [8] => 99
        [9] => 51
        [10] => 35
        [11] => 33
        [12] => 59
        [13] => 93
        [14] => 73
        [15] => 37
        [16] => 75
        [17] => 79
        [18] => 15
        [19] => 17
        [20] => 31
        [21] => 11
        [22] => 71
        [23] => 91
        [24] => 39
    )
      

  2.   

    这样可能好理解一点:
    从m个球中(球从1到m编号)任取n个球出来。
    1.显示所有可能的取法。
    2.显示n个球的从小到大编号结果。
      

  3.   

    1.任取n个时,每个只能取1次。即不能出现111,22这样的组合用array_rand()可以满足你。2.无序是指单纯的组合。即123和132和321是一样的。可以利用array_rand()取得的结果进行比较,你觉得呢?
    看看其它高手怎么做
      

  4.   

    <?php
    $n = array(1,3,5,7,9);
    $rs = $rs2 = array();/**
    递归函数,参数
    $ar 数据数组
    $m  组合串的长度
    $s  工作变量,用于缓存中间量
    **/
    function foo($ar,$m,$s='') {
      global $rs, $rs2;
      if($m == 0) {
        $rs[] = $s; //如果长度够了则赋值
        preg_match_all( "/./", $s, $rsar );
        $rs2[] = $rsar[0];
      }else {
        for($i=0;$i<count($ar);$i++) {
          foo($ar,$m-1,$s.$ar[$i]); //递归
        }
      }
    }foo($n,2);
    //print_r($rs);//顺序数组
    print_r($rs2);//顺序数组
    //shuffle( $rs );
    //print_r($rs);//打乱数组
    //去掉相似
    $uq = array();
    foreach( $rs2 as $key=>$val ) {
      $flag = 1;
      foreach( $uq as $k=>$v ) {
        if( array_diff( $val, $v ) ) continue;
        else $flag = 0;
      }
      if( $flag )
        $uq[] = $val;
    }
    print_r($uq);
    ?>//输出结果
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 1
            )    [1] => Array
            (
                [0] => 1
                [1] => 3
            )    [2] => Array
            (
                [0] => 1
                [1] => 5
            )    [3] => Array
            (
                [0] => 1
                [1] => 7
            )    [4] => Array
            (
                [0] => 1
                [1] => 9
            )    [5] => Array
            (
                [0] => 3
                [1] => 1
            )    [6] => Array
            (
                [0] => 3
                [1] => 3
            )    [7] => Array
            (
                [0] => 3
                [1] => 5
            )    [8] => Array
            (
                [0] => 3
                [1] => 7
            )    [9] => Array
            (
                [0] => 3
                [1] => 9
            )    [10] => Array
            (
                [0] => 5
                [1] => 1
            )    [11] => Array
            (
                [0] => 5
                [1] => 3
            )    [12] => Array
            (
                [0] => 5
                [1] => 5
            )    [13] => Array
            (
                [0] => 5
                [1] => 7
            )    [14] => Array
            (
                [0] => 5
                [1] => 9
            )    [15] => Array
            (
                [0] => 7
                [1] => 1
            )    [16] => Array
            (
                [0] => 7
                [1] => 3
            )    [17] => Array
            (
                [0] => 7
                [1] => 5
            )    [18] => Array
            (
                [0] => 7
                [1] => 7
            )    [19] => Array
            (
                [0] => 7
                [1] => 9
            )    [20] => Array
            (
                [0] => 9
                [1] => 1
            )    [21] => Array
            (
                [0] => 9
                [1] => 3
            )    [22] => Array
            (
                [0] => 9
                [1] => 5
            )    [23] => Array
            (
                [0] => 9
                [1] => 7
            )    [24] => Array
            (
                [0] => 9
                [1] => 9
            ))
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 1
            )    [1] => Array
            (
                [0] => 1
                [1] => 3
            )    [2] => Array
            (
                [0] => 1
                [1] => 5
            )    [3] => Array
            (
                [0] => 1
                [1] => 7
            )    [4] => Array
            (
                [0] => 1
                [1] => 9
            )    [5] => Array
            (
                [0] => 3
                [1] => 5
            )    [6] => Array
            (
                [0] => 3
                [1] => 7
            )    [7] => Array
            (
                [0] => 3
                [1] => 9
            )    [8] => Array
            (
                [0] => 5
                [1] => 7
            )    [9] => Array
            (
                [0] => 5
                [1] => 9
            )    [10] => Array
            (
                [0] => 7
                [1] => 9
            ))
      

  5.   

    真是不好意思,改了又改。再看看。。
    <?php
    $n = array(1,3,5,7,9);
    $rs = $rs2 = array();/**
    递归函数,参数
    $ar 数据数组
    $m  组合串的长度
    $s  工作变量,用于缓存中间量
    **/
    function foo($ar,$m,$s='') {
      global $rs, $rs2;
      if($m == 0) {
        $rs[] = $s; //如果长度够了则赋值
    preg_match_all( "/./", $s, $rsar );
    $rs2[] = $rsar[0];
      }else {
        for($i=0;$i<count($ar);$i++) {
      foo($ar,$m-1,$s.$ar[$i]); //递归
        }
      }
    }foo($n,3);
    //print_r($rs);//顺序数组
    //print_r($rs2);//顺序数组
    //去掉相似
    $uq = array();
    foreach( $rs2 as $key=>$val ) {
      if( array_unique( $val ) != $val ) continue;
      $flag = 1;
      foreach( $uq as $k=>$v ) {
        if ( ! array_diff( $val, $v )){$flag = 0;break;}
      }
      if( $flag )
        $uq[] = $val;
    }
    print_r($uq);?>//输出结果
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 5
            )    [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 7
            )    [2] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 9
            )    [3] => Array
            (
                [0] => 1
                [1] => 5
                [2] => 7
            )    [4] => Array
            (
                [0] => 1
                [1] => 5
                [2] => 9
            )    [5] => Array
            (
                [0] => 1
                [1] => 7
                [2] => 9
            )    [6] => Array
            (
                [0] => 3
                [1] => 5
                [2] => 7
            )    [7] => Array
            (
                [0] => 3
                [1] => 5
                [2] => 9
            )    [8] => Array
            (
                [0] => 3
                [1] => 7
                [2] => 9
            )    [9] => Array
            (
                [0] => 5
                [1] => 7
                [2] => 9
            ))
      

  6.   

    谢谢可爱钟!蓝海,你要的结果在最后加上这个就可以了。
    foreach($uq as $value)
    {
     echo implode(",",$value)."<br>";
    }