笛卡尔积函数(PHP,JS)

概述

这一段时间在搞商品后台的系统,其中关于通过商品的销售属性,生成SKU的处理
SKU:最小存货单位(Stock Keeping Unit)在连锁零售门店中有时称单品为一个SKU,定义为保存库存控制的最小可用单位,例如纺织品中一个SKU通常表示规格、颜色、款式。

js实现笛卡尔积

function descartes(...args) {
    if (args.length < 2) {
        return args[0] || [];
    }

    return [].reduce.call(args, (col, set) => {
        let res = [];
        col.forEach(c => {
            set.forEach(s => {
                let t = [].concat(Array.isArray(c) ? c : [c]);
                t.push(s);
                res.push(t);
            });
        });
        return res;
    });
}

descartes([1, 2, 3], ['a', 'b', 'c'], [8, 9]);

实现效果:
在这里插入图片描述

php 实现笛卡尔积

<?php
$arr = [[1, 2, 3], ['a', 'b', 'c'], [8, 9]];
/**
** 实现二维数组的笛卡尔积组合
** $arr 要进行笛卡尔积的二维数组
** $str 最终实现的笛卡尔积组合,可不写
** @return array
**/
function descartes($arr,$str = array()){
    //去除第一个元素
    $first = array_shift($arr);
    //判断是否是第一次进行拼接
    if(count($str) > 1) {
        foreach ($str as $k => $val) {
            foreach ($first as $key => $value) {
                //最终实现的格式 1,3,76
                //可根据具体需求进行变更
                $str2[] = $val.','.$value;
            }
        }
    }else{
        foreach ($first as $key => $value) {
            //最终实现的格式 1,3,76
            //可根据具体需求进行变更
            $str2[] = $value;
        }
    }

    //递归进行拼接
    if(count($arr) > 0){
        $str2 = descartes($arr,$str2);
    }
    //返回最终笛卡尔积
    return $str2;
}

$cartesian_product = descartes($arr);
var_dump($cartesian_product);
?> 

一篇讲解SKU不错的博客推荐给看到这篇博客的人;博客地址:
https://blog.csdn.net/liu_jun_y/article/details/53066490
谢谢您的查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值