zoukankan      html  css  js  c++  java
  • 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 ++;
            //改变获取的位置
        }
    
    ?>
  • 相关阅读:
    GTK+中的树状列表构件(GtkTreeView)
    [TOP]疯狂的投资
    多线程模式之MasterWorker模式
    一年读书总结
    Microsoft Visual Studio正忙解决办法
    使用vs自带的性能诊断工具
    C#中的扩展方法
    从委托、匿名方法到Lambda
    c#中的事件
    sqlserver中创建包含事务的存储过程
  • 原文地址:https://www.cnblogs.com/bin-pureLife/p/5239673.html
Copyright © 2011-2022 走看看