• php数组排列组合(递归形式),可用于服装等商品规格的排列组合


    php数组排列组合(递归形式),可用于服装等商品规格的排列组合

    一,排列组合返回数组

    /*
     * 二维数组的递归排列组合
     * 格式: $spce_arr = [[...],[...],[...],...]
     * 样例:  $spec = [
                ['x','xl','xxl'],
                ['红色','黑色','灰色','紫色'],
                ['男款','女款'],
            ];
     */
    function specArrCombination($arr,$i=0,$tmp=[]){
        $g_a  = [];
        if(count($arr)-1<=$i){
            $ar = [];
            foreach($arr[$i] as $key=>$val){
                $tmp_sukarr=[];
                if($i==0){
                    $tmp_sukarr[] = $val;
                    $ar[] = $tmp_sukarr;
                }else{
                    $tmp_sukarr=$tmp;
                    $tmp_sukarr[] = $val;
                    $ar[] = $tmp_sukarr;
                }
            }
            return $ar;
        }else{
    
            foreach($arr[$i] as $key=>$val){
                $tmp_sukarr=[];
    
                if(count($tmp)<=0){
                    $tmp_sukarr[] = $val;
                }else{
                    $tmp_sukarr=$tmp;
                    $tmp_sukarr[] = $val;
                }
    
                $tmpNode = $tmp_sukarr;
                $g_a = array_merge($g_a,specArrCombination($arr,$i+1,$tmpNode));
    
            }
    
        }
    
        return $g_a;
    
    }

    例子:

            $spec = [
                ['x','xl','xxl'],
                ['红色','黑色','灰色','紫色'],
                ['男款','女款'],
    
            ];
            $res1 = specArrCombination($spec);//测试一下排列组合
            var_dump($res1);

    结果是数组形式(要其他格式如字符串需要自行修改方法或看下面)

     =======================================

    二,排列组合返回字符串

    /*
     * 二维数组的递归排列组合
     * 格式: $spce_arr = [[...],[...],[...],...]
     * 样例:  $spec = [
                ['x','xl','xxl'],
                ['红色','黑色','灰色','紫色'],
                ['男款','女款'],
            ];
     */
    function specArrCombination($arr,$i=0,$tmp=''){//$tmp=[]
        $g_a  = [];
        if(count($arr)-1<=$i){
            $ar = [];
            foreach($arr[$i] as $key=>$val){
                $tmp_sukarr = '';//$tmp_sukarr=[];
                if($i==0){
                    $tmp_sukarr .= $val;//$tmp_sukarr[] = $val;
                    $ar[] = $tmp_sukarr;
                }else{
                    $tmp_sukarr=$tmp;
                    $tmp_sukarr .= ','.$val;//$tmp_sukarr[] = $val;
                    $ar[] = $tmp_sukarr;
                }
            }
            return $ar;
        }else{
    
            foreach($arr[$i] as $key=>$val){
                $tmp_sukarr = '';//$tmp_sukarr=[];
    
                if($tmp==''){//count($tmp)<=0
                    $tmp_sukarr .= $val;//$tmp_sukarr[] = $val;
                }else{
                    $tmp_sukarr=$tmp;
                    $tmp_sukarr .= ','.$val;//$tmp_sukarr[] = $val;
                }
    
                $tmpNode = $tmp_sukarr;
                $g_a = array_merge($g_a,specArrCombination($arr,$i+1,$tmpNode));
    
            }
    
        }
    
        return $g_a;
    
    }

    例子:

            $spec = [
                ['x','xl','xxl'],
                ['红色','黑色','灰色','紫色'],
                ['男款','女款'],
    
            ];
            $res1 = specArrCombination($spec);//测试一下排列组合
            var_dump($res1);

    结果是字符串形式:

  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/fps2tao/p/15884033.html
Copyright © 2020-2023  润新知