PHP开发商品批量生成sku组合(两种方式)
3966
近期在开发一个电商系统,做到了商品模块。虽然增删改查在所难免,但是商品这块更多的是js的调用等效果。还有更为重要的就是商品sku的批量生成与组合了。
不同的系统有不同的需求,以下的需求就是要添加完各种规格后批量生成sku的。
效果图
页面代码这里就不说了,sku的生成方式是根据所有规格进行组合,也就是数学上的笛卡尔积,我用php写了两种方式,记录一下。
第一种,生成字符串
- <?php
- function Cartesian($data){
- $len = count($data);
- for ($i = 0; $i< $len-1; $i++) {
- if ($i === 0) {
- // 数组第一个值
- $result = $data[0];
- }
- $temp = [];
- // 数组第一个值和第二个值组合
- foreach ($result as $res) {
- //数组第二个值...$i+1
- foreach($data[$i+1] as $sec){
- $temp[] = $res . '-' . $sec;
- }
- $result = $temp;
- }
- }
- return $result;
- }
- //需要计算的数组
- $data = array(
- array('白色','银色','玫瑰金'),
- array('64G','128G'),
- array('移动','电信','联通'),
- array('国行','港版')
- );
- //打印结果
- $result = Cartesian($data);
- print_r($result);
- ?>
实际开发中,你只要生成上面的二维数组就可以组合了,效果如下:
- Array
- (
- [0] => 白色-64G-移动-国行
- [1] => 白色-64G-移动-港版
- [2] => 白色-64G-电信-国行
- [3] => 白色-64G-电信-港版
- [4] => 白色-64G-联通-国行
- [5] => 白色-64G-联通-港版
- [6] => 白色-128G-移动-国行
- [7] => 白色-128G-移动-港版
- [8] => 白色-128G-电信-国行
- [9] => 白色-128G-电信-港版
- [10] => 白色-128G-联通-国行
- [11] => 白色-128G-联通-港版
- [12] => 银色-64G-移动-国行
- [13] => 银色-64G-移动-港版
- [14] => 银色-64G-电信-国行
- [15] => 银色-64G-电信-港版
- [16] => 银色-64G-联通-国行
- [17] => 银色-64G-联通-港版
- [18] => 银色-128G-移动-国行
- [19] => 银色-128G-移动-港版
- [20] => 银色-128G-电信-国行
- [21] => 银色-128G-电信-港版
- [22] => 银色-128G-联通-国行
- [23] => 银色-128G-联通-港版
- [24] => 玫瑰金-64G-移动-国行
- [25] => 玫瑰金-64G-移动-港版
- [26] => 玫瑰金-64G-电信-国行
- [27] => 玫瑰金-64G-电信-港版
- [28] => 玫瑰金-64G-联通-国行
- [29] => 玫瑰金-64G-联通-港版
- [30] => 玫瑰金-128G-移动-国行
- [31] => 玫瑰金-128G-移动-港版
- [32] => 玫瑰金-128G-电信-国行
- [33] => 玫瑰金-128G-电信-港版
- [34] => 玫瑰金-128G-联通-国行
- [35] => 玫瑰金-128G-联通-港版
- )
第二种,生成数组格式
- <?php
- function Cartesian($data){
- $len = count($data);
- // 取第一个集合数组值
- $result = $data[0];
- for ($i = 0; $i< $len-1; $i++) {
- $arr1 = $result;
- $result = [];
- // 数组第一个值和第二个值组合
- foreach ($arr1 as $res) {
- //数组第二个值...$i+1
- foreach($data[$i+1] as $sec){
- if(!is_array($res)) {
- $res = array($res);
- }
- if(!is_array($sec)){
- $sec = array($sec);
- }
- $result[] = array_merge_recursive($res,$sec);
- }
- }
- }
- return $result;
- }
- //需要计算的数组
- $data = array(
- array('白色','银色','玫瑰金'),
- array('64G','128G'),
- array('移动','电信','联通'),
- array('国行','港版')
- );
- //打印结果
- $result = Cartesian($data);
- print_r($result);
- ?>
输出打印结果
- Array
- (
- [0] => Array
- (
- [0] => 白色
- [1] => 64G
- [2] => 移动
- [3] => 国行
- )
- [1] => Array
- (
- [0] => 白色
- [1] => 64G
- [2] => 移动
- [3] => 港版
- )
- [2] => Array
- (
- [0] => 白色
- [1] => 64G
- [2] => 电信
- [3] => 国行
- )
- [3] => Array
- (
- [0] => 白色
- [1] => 64G
- [2] => 电信
- [3] => 港版
- )
- [4] => Array
- (
- [0] => 白色
- [1] => 64G
- [2] => 联通
- [3] => 国行
- )
- [5] => Array
- (
- [0] => 白色
- [1] => 64G
- [2] => 联通
- [3] => 港版
- )
- [6] => Array
- (
- [0] => 白色
- [1] => 128G
- [2] => 移动
- [3] => 国行
- )
- [7] => Array
- (
- [0] => 白色
- [1] => 128G
- [2] => 移动
- [3] => 港版
- )
- [8] => Array
- (
- [0] => 白色
- [1] => 128G
- [2] => 电信
- [3] => 国行
- )
- [9] => Array
- (
- [0] => 白色
- [1] => 128G
- [2] => 电信
- [3] => 港版
- )
- [10] => Array
- (
- [0] => 白色
- [1] => 128G
- [2] => 联通
- [3] => 国行
- )
- [11] => Array
- (
- [0] => 白色
- [1] => 128G
- [2] => 联通
- [3] => 港版
- )
- [12] => Array
- (
- [0] => 银色
- [1] => 64G
- [2] => 移动
- [3] => 国行
- )
- [13] => Array
- (
- [0] => 银色
- [1] => 64G
- [2] => 移动
- [3] => 港版
- )
- [14] => Array
- (
- [0] => 银色
- [1] => 64G
- [2] => 电信
- [3] => 国行
- )
- [15] => Array
- (
- [0] => 银色
- [1] => 64G
- [2] => 电信
- [3] => 港版
- )
- [16] => Array
- (
- [0] => 银色
- [1] => 64G
- [2] => 联通
- [3] => 国行
- )
- [17] => Array
- (
- [0] => 银色
- [1] => 64G
- [2] => 联通
- [3] => 港版
- )
- [18] => Array
- (
- [0] => 银色
- [1] => 128G
- [2] => 移动
- [3] => 国行
- )
- [19] => Array
- (
- [0] => 银色
- [1] => 128G
- [2] => 移动
- [3] => 港版
- )
- [20] => Array
- (
- [0] => 银色
- [1] => 128G
- [2] => 电信
- [3] => 国行
- )
- [21] => Array
- (
- [0] => 银色
- [1] => 128G
- [2] => 电信
- [3] => 港版
- )
- [22] => Array
- (
- [0] => 银色
- [1] => 128G
- [2] => 联通
- [3] => 国行
- )
- [23] => Array
- (
- [0] => 银色
- [1] => 128G
- [2] => 联通
- [3] => 港版
- )
- [24] => Array
- (
- [0] => 玫瑰金
- [1] => 64G
- [2] => 移动
- [3] => 国行
- )
- [25] => Array
- (
- [0] => 玫瑰金
- [1] => 64G
- [2] => 移动
- [3] => 港版
- )
- [26] => Array
- (
- [0] => 玫瑰金
- [1] => 64G
- [2] => 电信
- [3] => 国行
- )
- [27] => Array
- (
- [0] => 玫瑰金
- [1] => 64G
- [2] => 电信
- [3] => 港版
- )
- [28] => Array
- (
- [0] => 玫瑰金
- [1] => 64G
- [2] => 联通
- [3] => 国行
- )
- [29] => Array
- (
- [0] => 玫瑰金
- [1] => 64G
- [2] => 联通
- [3] => 港版
- )
- [30] => Array
- (
- [0] => 玫瑰金
- [1] => 128G
- [2] => 移动
- [3] => 国行
- )
- [31] => Array
- (
- [0] => 玫瑰金
- [1] => 128G
- [2] => 移动
- [3] => 港版
- )
- [32] => Array
- (
- [0] => 玫瑰金
- [1] => 128G
- [2] => 电信
- [3] => 国行
- )
- [33] => Array
- (
- [0] => 玫瑰金
- [1] => 128G
- [2] => 电信
- [3] => 港版
- )
- [34] => Array
- (
- [0] => 玫瑰金
- [1] => 128G
- [2] => 联通
- [3] => 国行
- )
- [35] => Array
- (
- [0] => 玫瑰金
- [1] => 128G
- [2] => 联通
- [3] => 港版
- )
- )
本文系转载,原文地址:https://juejin.cn/post/7170889538343501838
本文网址:https://www.zztuku.com/index.php/detail-13428.html
站长图库 - PHP开发商品批量生成sku组合(两种方式)
申明:本文转载于《掘金社区》,如有侵犯,请 联系我们 删除。
您还没有登录,请 登录 后发表评论!
提示:请勿发布广告垃圾评论,否则封号处理!!