PHP 多个一维数组排列组合的所有可能

<?php
    // auth bin.chen 525945448


    $a = array('A');
    $b = array('C');
    $c = array('E');
    $f = array('P');
    $d = array($a,$b,$c,$f );
    //计算每一个数组的长度
    $len = 1;
    $arrLen = count($d); //需要排列数组有多少个
    $recIndex = null; //记录当前该取的位置
    //foreach 计数 
    $count_3 = 0;
    foreach ($d as $key => $value) {
        $lenRec[$count_3] = count($value);
        $len = $lenRec[$count_3]*$len;
        $recIndex[] = 0;//第一次全部取第0个
        $count_3++;
    }
    //算出% 的值
    $count = 1;
    foreach ($lenRec as $key => $value) {
        $moduloVal = 1;
        
        if($arrLen == $count){
                $modulo[] = count($d[$arrLen-1]); //等于最后一个的长度
        }else{
            $count_1 = 1;
            foreach ($lenRec as $index => $item) {
                $count_1 > $count && $moduloVal = $moduloVal*$item;
                $count_1 ++;
            }
            $modulo[] = $moduloVal;
        }
        $count ++;//为了防止$d key是有值的 不是自然序列 需要计数
    }
    $i = 1;

    while ( $i <= $len) {
        $html = '';
        $count_2 = 0;// 取模
        $temp = '';
        foreach ($d as $value) {
               $html .= $value[$recIndex[$count_2]%$lenRec[$count_2]];
               $count_2 ++;
        }

        echo $html."<br>";
        foreach ($modulo as $key => $value) {
            if($i%$value == 0 && $key < $arrLen - 1 ){
                $recIndex[$key] = $recIndex[$key] +1;   
            } 
            if($key == $arrLen - 1){
                 if($i%$value == 0){
                        $recIndex[$key] = 0;  
                 }else{
                    $recIndex[$key] = $recIndex[$key] +1;  
                 }
            } 
        }
        $i ++;
        //改变获取的位置
    }

?>

 

posted @ 2016-03-03 18:26  鱼尾纹  阅读(3311)  评论(0编辑  收藏  举报