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

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

  1. /*
  2. Author:GaZeon
  3. Date:2016-6-20
  4. Function:getArrSet
  5. Param:$arrs 二维数组
  6. getArrSet(array(array(),...))
  7. 数组不重复排列集合
  8. */
  9. function getArrSet($arrs,$_current_index=-1)
  10. {
  11. //总数组
  12. static $_total_arr;
  13. //总数组下标计数
  14. static $_total_arr_index;
  15. //输入的数组长度
  16. static $_total_count;
  17. //临时拼凑数组
  18. static $_temp_arr;
  19.  
  20. //进入输入数组的第一层,清空静态数组,并初始化输入数组长度
  21. if($_current_index<0)
  22. {
  23. $_total_arr=array();
  24. $_total_arr_index=0;
  25. $_temp_arr=array();
  26. $_total_count=count($arrs)-1;
  27. getArrSet($arrs,0);
  28. }
  29. else
  30. {
  31. //循环第$_current_index层数组
  32. foreach($arrs[$_current_index] as $v)
  33. {
  34. //如果当前的循环的数组少于输入数组长度
  35. if($_current_index<$_total_count)
  36. {
  37. //将当前数组循环出的值放入临时数组
  38. $_temp_arr[$_current_index]=$v;
  39. //继续循环下一个数组
  40. getArrSet($arrs,$_current_index+1);
  41.  
  42. }
  43. //如果当前的循环的数组等于输入数组长度(这个数组就是最后的数组)
  44. else if($_current_index==$_total_count)
  45. {
  46. //将当前数组循环出的值放入临时数组
  47. $_temp_arr[$_current_index]=$v;
  48. //将临时数组加入总数组
  49. $_total_arr[$_total_arr_index]=$_temp_arr;
  50. //总数组下标计数+1
  51. $_total_arr_index++;
  52. }
  53.  
  54. }
  55. }
  56.  
  57. return $_total_arr;
  58. }
  59.  
  60. /*************TEST**************/
  61. $arr=array(
  62. array('a','b','c'),
  63. array('A','B','C'),
  64. array('1','2','3'),
  65. array('I','II','III')
  66. );
  67.  
  68. var_dump(getArrSet($arr));

PHP数组内容不重复组合排列算法的更多相关文章

  1. js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合

    现在有一批手机,其中颜色有['白色','黑色','金色','粉红色']:内存大小有['16G','32G','64G','128G'],版本有['移动','联通','电信'],要求写一个算法,实现[[ ...

  2. 删除排序数组中的重复项--leetcode算法题

    题目来自于leetcode 题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O ...

  3. N个数组中所有元素的排列组合(笛卡尔积)算法

    (1)N个数组对象中所有元素排列组合算法 private List<List<Object>> combineAlg(List<Object[]> nArray) ...

  4. C/C++面试之算法系列--去除数组中的重复数字

    去除数组中的重复数字 Sailor_forever  sailing_9806@163.com 转载请注明 http://blog.csdn.net/sailor_8318/archive/2008/ ...

  5. php 排列组合函数(无重复组合,可重复组合【全排列组合】)

    <?php /** * 无重复排列組合 * @Author MAX * @DateTime 2018-09-07T16:28:40+0800 * @param Array $arr 需要排列組合 ...

  6. 给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合

    给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合 ruby代码: def all_possible_arr arr, length = 5 ret = [] leng ...

  7. 前端与算法 leetcode 26. 删除排序数组中的重复项

    目录 # 前端与算法 leetcode 26. 删除排序数组中的重复项 题目描述 概要 提示 解析 算法 # 前端与算法 leetcode 26. 删除排序数组中的重复项 题目描述 26. 删除排序数 ...

  8. 算法练习之合并两个有序链表, 删除排序数组中的重复项,移除元素,实现strStr(),搜索插入位置,无重复字符的最长子串

    最近在学习java,但是对于数据操作那部分还是不熟悉 因此决定找几个简单的算法写,用php和java分别实现 1.合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两 ...

  9. 笔试算法题(29):判断元素范围1到N的数组是否有重复数字 & 计算整数的7倍

    出题:一个长度为N的数组,其中的元素取值范围是1到N,要求快速判断数组是否存在重复数字: 分析: 解法1:如果N个元素的范围都是在1到N,所以如果没有重复元素,则每一个位置恰好可以对应数组中的一个元素 ...

随机推荐

  1. Designing IP-Based Video Conferencing Systems: Dealing with Lip Synchronization(唇音同步)

    转自:http://www.ciscopress.com/articles/article.asp?p=705533&seqNum=6 Correlating Timebases Using ...

  2. 关闭英文拼写检查,关闭xml验证

    http://blog.sina.com.cn/s/blog_70b623e4010173ce.html eclipse里面的许多设置对于国内开发者日常使用不太适用,反而会成为干扰.既然是完全可配置的 ...

  3. 分享Kali Linux 2016.2第50周镜像文件

    分享Kali Linux 2016.2第50周镜像文件Kali Linux官方于12月11日发布Kali Linux 2016.2的第50周镜像.这次保持以往规律,仍然是11个镜像文件.默认的Gnom ...

  4. 虚拟树Demos\Minimal 简单的例子

    //分析虚拟树demo6-VirtualTreeView\VirtualTreeViewV5.3.0\Demos\Minimal的main.pas文件 unit Main; // Demonstrat ...

  5. Python爬虫学习(5): 简单的爬取

    学习了urllib,urlib2以及正则表达式之后就可以做一些简单的抓取以及处理工作.为了抓取方便,这里选择糗事百科的网页作为抓取对象. 1. 获取数据: In [293]: url = " ...

  6. Codeforces525E Anya and Cubes(双向搜索)

    题目 Source http://codeforces.com/contest/525/problem/E Description Anya loves to fold and stick. Toda ...

  7. Windows平台下为Python添加MongoDB支持PyMongo

    到Python官网下载pymongo-2.6.3.win-amd64-py2.7.exe 安装pymongo-2.6.3.win-amd64-py2.7.exe 参照官方的用例进行测试 打开命令提示符 ...

  8. Mysql 5.7 使用SSL安全连接

    MySQL默认的数据通道是不加密的,在一些安全性要求特别高的场景下,我们需要配置MySQL端口为SSL,使得数据通道加密处理,避免敏感信息泄漏和被篡改.当然,启用MySQL SSL之后,由于每个数据包 ...

  9. dede调用img图片

    1.默认的index.htm调用: {dede:arclist row='3' titlelen='30' typeid='1'} <div class="swiper-slide&q ...

  10. 静态属性,直接把iis搞垮掉 Http error 503 Service Unavailable

    属性有个好处,可以在get的时候做一些特殊处理,比如返回一个默认值,正是这个特性,吸引我讲静态字段修改了成静态属性,代码如下: public static string 微信订阅号 { get { i ...