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);

结果是字符串形式:

 

posted @ 2022-02-11 17:04  与f  阅读(579)  评论(0编辑  收藏  举报