php数组组合

Posted

技术标签:

【中文标题】php数组组合【英文标题】:php array combination 【发布时间】:2010-11-28 23:08:43 【问题描述】:

我想从一组 [0...(n-1)] 中生成所有长度为 r 的组合

所以输出应该是这样的(n = 6 r = 2)

$res = array(array(0,1),array(0,2),array(0,3),array(0,4),array(0,5),array(1,2),array(1,3),array(1,4),array(1,5),array(2,3),array(2,4),array(2,5),array(3,4),array(3,5),array(4,5));

具有类似的功能

function permutate($select, $max)

其中 $select = r 和 $max = n

这是我目前的尝试,但我的大脑今晚似乎无法正常工作,它仅适用于 $select = 2

function permutate($select, $max)

    $out = array();
    for( $i = 0; $i < ($max) ; $i++)
    
        for ($x = ($i + 1); $x < ($max); $x++)
        

            $temp = array($i);

            for($l = 0; $l < ($select-1); $l++)
            
                if(($x+$l) < $max )
                                
                    array_push($temp, $x+$l);
                
                
            if(count($temp) == $select)
            
                array_push($out, $temp);
            
        
    

    return $out;

提前致谢

【问题讨论】:

【参考方案1】:

由于您需要未定义数量的循环,因此您需要递归执行:

function permutation($select, $max) 
    if ($select === 1) 
        $result = range(0, $max);
        foreach ($result as &$entry) 
            $entry = array($entry);
        
        return $result;
    
    $result = array();
    $previous = permutation($select - 1, $max - 1);
    foreach ($previous as $entry) 
        $last = end($entry);
        for ($i = $last + 1; $i <= $max; $i++) 
            $result[] = array_merge($entry, array($i));
        
    
    return $result;

【讨论】:

这只适用于 $select = 2,因为当 $select = 3 你只得到 array(array(0,1),array(0,2) ......) ;什么时候应该是array(array(0,1,2), array(0,2,3) ......)

以上是关于php数组组合的主要内容,如果未能解决你的问题,请参考以下文章

php编程:把字母按一定的个数组合。

php当中,如何将数组合并成变量呢?

数组元素的PHP组合

PHP数组组合

php数组组合

PHP - 生成数组中的所有项目组合