文档章节

对二维数组中的内容进行排列组合

o
 osc_isezqdgg
发布于 2019/09/18 14:53
字数 785
阅读 5
收藏 0

精选30+云产品,助力企业轻松上云!>>>

 

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

 

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

/*
    2 Author:GaZeon
    3 Date:2016-6-20
    4 Function:getArrSet
    5 Param:$arrs 二维数组
    6 getArrSet(array(array(),...))
    7 数组不重复排列集合
    8 */
    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;
            $this->getArrSet($arrs, 0);
        } else {
            //循环第$_current_index层数组
            foreach ($arrs[$_current_index] as $rkey=>$v) {
                if($rkey==0){
                    continue;
                }
                //如果当前的循环的数组少于输入数组长度
                if ($_current_index < $_total_count) {
                    //将当前数组循环出的值放入临时数组
                    $_temp_arr[$_current_index] = $v;
                    //继续循环下一个数组
                    $this->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;//返回值为一个多维数组,将每一个子数组的值连接起来就是组合后的值
    }

$arr = array(
array('a', 'b', 'c'),
array('A', 'B', 'C'),
array('I','II','III')
);
$result = $this->getArrSet($arr);
var_dump($result);
 

 

如果需要组合内容的来源坐标使用下面这个方法

/*
2 Author:GaZeon
3 Date:2016-6-20
4 Function:getArrSet
5 Param:$arrs 二维数组
6 getArrSet(array(array(),...))
7 数组不重复排列集合
8 */
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;
        $this->getArrSet($arrs, 0);
    } else {
        //循环第$_current_index层数组
        foreach ($arrs[$_current_index] as $rkey=>$v) {
            //如果当前的循环的数组少于输入数组长度
            if ($_current_index < $_total_count) {
                //将当前数组循环出的值放入临时数组
                $_temp_arr[$_current_index] = $v.':'.$_current_index.','.$rkey;
                //继续循环下一个数组
                $this->getArrSet($arrs, $_current_index + 1);

            } //如果当前的循环的数组等于输入数组长度(这个数组就是最后的数组)
            else if ($_current_index == $_total_count) //将当前数组循环出的值放入临时数组
            {
                $_temp_arr[$_current_index] = $v.':'.$_current_index.','.$rkey;
                //将临时数组加入总数组
                $_total_arr[$_total_arr_index] = $_temp_arr;
                //总数组下标计数+1
                $_total_arr_index++;
            }
        }
    }
    return $_total_arr;//返回值为一个数组,数组的值 冒号之前为组合内容,冒号之后为组合内容在原数组中的坐标
}
$arr = array(
array('a', 'b', 'c'),
array('A', 'B', 'C'),
array('I','II','III')
);
$result = $this->getArrSet($arr);
var_dump($result);

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
10、二维数组的申请(test7.java)

  我个人认为,二维数组的构造就是在一位数组中存入一个地址,这个地址指向另一个一位数组,这样通过这种排列组合便构造成了二维数组。      二维数组的形状,有的时候二维数组看起来像...

osc_jnyhv0pz
2018/04/25
2
0
数独终盘生成的几种方法

数独(すうどく,Sudoku)是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复...

王孟君
2016/11/04
5.2K
0
LeetCode.1128-等价多米诺骨牌对的数量(Number of Equivalent Domino Pairs)

这是小川的第394次更新,第428篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第259题(顺位题号是1128)。给定多米诺骨牌列表,当且仅当(且)或(且),等价于,也就是说,一个多...

程序员小川
2019/07/31
0
0
W3C高级算法挑战之python实现

最近在学python,网上很难找到对应的算法题网站,专业算法网站大部分都是国外的,之前在w3cschool看到有三个级别的Javascript脚本算法挑战,尝试用python实现,代码量相对比较少,如果你有更...

osc_ro4r5mh1
2019/03/15
7
0
LeetCode.1128-等价多米诺骨牌对的数量(Number of Equivalent Domino Pairs)

这是小川的第394次更新,第428篇原创<br/> 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第259题(顺位题号是1128)。给定多米诺骨牌列表,当且仅当(且)或(且),等价于,也就是说,...

osc_sgztt2v6
2019/07/31
1
0

没有更多内容

加载失败,请刷新页面

加载更多

签到领金币模块

  最近做了一个签到模块的需求,主要就是签到,根据连签天数提供不同和奖励并在首页展示不同的文案。奖励分为金币和话费,话费也是通过金币的形式发放,但是有效期只有1天。 签到需求 每日...

osc_2frf70qv
2分钟前
0
0
正交多项式介绍及应用

1 正交多项式的定义 1.1 正交多项式定义 定义: 一个多项式序列 ${ {p_n}(x)} _{n = 0}^\infty $,其阶数为 \([{p_n}(x)] = n\) ,对于每一个 \(n\),这个多项式序列在开区间 \((a,b)\) 上关...

osc_mbhfa1vl
3分钟前
0
0
百万级别数据Excel导出优化

前提 这篇文章不是标题党,下文会通过一个仿真例子分析如何优化百万级别数据Excel导出。 笔者负责维护的一个数据查询和数据导出服务是一个相对远古的单点应用,在上一次云迁移之后扩展为双节...

osc_3g4j2ghj
5分钟前
0
0
Java 字符串比较、拼接问题

@ 目录 1.字符串的比较 1. 1 字符串常量池 1.2 String类型的比较方式 1.3 String的创建方式 1.3.1 直接使用“=”进行赋值 1.3.2 使用“new”关键字创建新对象 1.3.3 intern()方法返回的引用地...

osc_bjmmswh6
6分钟前
0
0
EJB到底是什么?(通俗易懂白话文)

1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么,总得说说什么是所谓的"服务 集群"和"企业级开发"吧! 这个问题其实挺关键的,......

onedotdot
6分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部