PHP数组内容不重复组合排列算法

本文介绍了一种PHP函数,用于生成二维数组的不重复排列组合,以优化商品库存模块中属性组合的设置。作者GaZeon在2016年6月20日分享了该函数,它通过递归方式遍历所有可能的属性组合,减少了手动设置的时间。示例代码展示了如何应用此函数来组合颜色、屏幕尺寸、系统和电量等属性。
摘要由CSDN通过智能技术生成

PHP数组内容不重复组合排列算法

最近在做ecshop的商品库存模块,分别给一款商品的多个属性组合设置库存,如下图:

 

 一款手机有不同颜色,屏幕尺寸,系统和电量,都要设置不同的库存,如果都要手动选择属性组合,则会耗费很多不必要的时间。假如打开页面时就已经设置好属性排列组合那就最好不过,因此想了整天,写了如下函数:

/*
Author:GaZeon
Date:2016-6-20
Function:getArrSet
Param:$arrs 二维数组
getArrSet(array(array(),...))
数组不重复排列集合
*/
function getArrSet($arrs,$_current_index=-1)
{
    //总数组
    static $_total_arr;
    //总数组下标计数
    static $_total_arr_index;
    //输入的数组长度
    static $_total_count;
    //临时拼凑数组
    static $_temp_arr;

    //进入输入数组的第一层,清空静态数组,并初始化输入数组长度
    if($_current_index<0)
    {
        $_total_arr=array();
        $_total_arr_index=0;
        $_temp_arr=array();
        $_total_count=count($arrs)-1;
        getArrSet($arrs,0);
    }
    else
    {
        //循环第$_current_index层数组
        foreach($arrs[$_current_index] as $v)
        {
            //如果当前的循环的数组少于输入数组长度
            if($_current_index<$_total_count)
            {
                //将当前数组循环出的值放入临时数组
                $_temp_arr[$_current_index]=$v;
                //继续循环下一个数组
                getArrSet($arrs,$_current_index+1);

            }
            //如果当前的循环的数组等于输入数组长度(这个数组就是最后的数组)
            else if($_current_index==$_total_count)
            {
                //将当前数组循环出的值放入临时数组
                $_temp_arr[$_current_index]=$v;
                //将临时数组加入总数组
                $_total_arr[$_total_arr_index]=$_temp_arr;
                //总数组下标计数+1
                $_total_arr_index++;
            }

        }
    }

    return $_total_arr;
}

/*************TEST**************/
$arr=array(
    array('a','b','c'),
    array('A','B','C'),
    array('1','2','3'),
    array('I','II','III')
);

var_dump(getArrSet($arr));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值