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

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

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

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

 /*
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));
上一篇:H5项目常见问题


下一篇:MySQL 基础及性能优化工具