最近在做ecshop的商品库存模块,分别给一款商品的多个属性组合设置库存,如下图:
一款手机有不同颜色,屏幕尺寸,系统和电量,都要设置不同的库存,如果都要手动选择属性组合,则会耗费很多不必要的时间。假如打开页面时就已经设置好属性排列组合那就最好不过,因此想了整天,写了如下函数:
1 <?php 2 3 /* 4 Author:GaZeon 5 Date:2016-6-20 6 Function:getArrSet 7 Param:$arrs 二维数组 8 getArrSet(array(array(),...)) 9 数组内容不重复组合排列 10 */ 11 function getArrSet($arrs,$_current_index=-1) 12 { 13 //总数组 14 static $_total_arr=array(); 15 //总数组下标计数 16 static $_total_arr_index=0; 17 //输入的数组长度 18 static $_total_count; 19 //临时拼凑数组 20 static $_temp_arr=array(); 21 22 //进入输入数组的第一层,并初始化输入数组长度 23 if($_current_index<0) 24 { 25 $_total_count=count($arrs)-1; 26 getSet($arrs,0); 27 } 28 else 29 { 30 //循环第$_current_index层数组 31 foreach($arrs[$_current_index] as $v) 32 { 33 //如果当前的循环的数组少于输入数组长度 34 if($_current_index<$_total_count) 35 { 36 //将当前数组循环出的值放入临时数组 37 $_temp_arr[$_current_index]=$v; 38 //继续循环下一个数组 39 getSet($arrs,$_current_index+1); 40 41 } 42 //如果当前的循环的数组等于输入数组长度(这个数组就是最后的数组) 43 else if($_current_index==$_total_count) 44 { 45 //将当前数组循环出的值放入临时数组 46 $_temp_arr[$_current_index]=$v; 47 //将临时数组加入总数组 48 $_total_arr[$_total_arr_index]=$_temp_arr; 49 //总数组下标计数+1 50 $_total_arr_index++; 51 } 52 53 } 54 } 55 56 return $_total_arr; 57 } 58 59 /*************TEST**************/ 60 $arr=array( 61 array(‘a‘,‘b‘,‘c‘), 62 array(‘A‘,‘B‘,‘C‘), 63 array(‘1‘,‘2‘,‘3‘), 64 array(‘I‘,‘II‘,‘III‘) 65 ); 66 67 var_dump(getArrSet($arr)); 68
时间: 2024-11-08 01:44:56