php開發商品批次生成sku組合(兩種方式)

2022-11-28 18:01:03
近期在開發一個電商系統,做到了商品模組。雖然增刪改查在所難免,但是商品這塊更多的是js的呼叫等效果。還有更為重要的就是商品sku的批次生成與組合了。

不同的系統有不同的需求,以下的需求就是要新增完各種規格後批次生成sku的。【推薦學習:】

ced65d7ef926850b28bb015902156eb.jpg

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

效果圖

ff7fb6fe2e0931795bb0e99d06adba6.jpg

頁面程式碼這裡就不說了,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

以上就是php開發商品批次生成sku組合(兩種方式)的詳細內容,更多請關注TW511.COM其它相關文章!