PHP开发商品批量生成sku组合(两种方式)

近期在开发一个电商系统,做到了商品模块。虽然增删改查在所难免,但是商品这块更多的是js的调用等效果。还有更为重要的就是商品sku的批量生成与组合了。不同的系统有不同的需求,以下的需求就是要添加完各种规格后批量生成sku的。效果图页面代码这里

近期在开发一个电商系统,做到了商品模块。虽然增删改查在所难免,但是商品这块更多的是js的调用等效果。还有更为重要的就是商品sku的批量生成与组合了。

不同的系统有不同的需求,以下的需求就是要添加完各种规格后批量生成sku的。

PHP开发商品批量生成sku组合(两种方式)

效果图

PHP开发商品批量生成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

本站内容转自网络,若侵犯了你的权益,请联系我们,我们将在第一时间删除。

如若转载,请注明出处:http://www.ntuku.com/18743.html