Home > Backend Development > PHP Tutorial > PHP develops products to generate SKU combinations in batches (two methods)

PHP develops products to generate SKU combinations in batches (two methods)

藏色散人
Release: 2023-04-11 08:58:01
forward
7089 people have browsed it

Recently, I am developing an e-commerce system with a product module. Although additions, deletions, modifications and checks are inevitable, the product aspect is more about the effects of js calls and other effects. What is even more important is the batch generation and combination of product SKUs.

Different systems have different requirements. The following requirements are to generate SKUs in batches after adding various specifications. [Recommended learning: PHP video tutorial]

PHP develops products to generate SKU combinations in batches (two methods)

Rendering

PHP develops products to generate SKU combinations in batches (two methods)

The page code is here Not to mention, the way to generate SKU is to combine all specifications, which is the Cartesian product in mathematics. I wrote two methods in PHP and recorded them.

The first method is to generate strings

<?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 . &#39;-&#39; . $sec;
            }
            $result = $temp;
        }
    }

    return $result;
}

//需要计算的数组
$data = array(
 array(&#39;白色&#39;,&#39;银色&#39;,&#39;玫瑰金&#39;),
 array(&#39;64G&#39;,&#39;128G&#39;),
 array(&#39;移动&#39;,&#39;电信&#39;,&#39;联通&#39;),
 array(&#39;国行&#39;,&#39;港版&#39;)
);

//打印结果
$result = Cartesian($data);
print_r($result);
?>
Copy after login

In actual development, you only need to generate the above two-dimensional array to combine. The effect is as follows:

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-联通-港版
)
Copy after login

The second method is , generate array format

<?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(&#39;白色&#39;,&#39;银色&#39;,&#39;玫瑰金&#39;),
 array(&#39;64G&#39;,&#39;128G&#39;),
 array(&#39;移动&#39;,&#39;电信&#39;,&#39;联通&#39;),
 array(&#39;国行&#39;,&#39;港版&#39;)
);

//打印结果
$result = Cartesian($data);
print_r($result);

?>
Copy after login

Output and print results

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] => 港版
        )

)
Copy after login

This article is reprinted, original address: https://juejin.cn/post/7170889538343501838

The above is the detailed content of PHP develops products to generate SKU combinations in batches (two methods). For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:juejin.im
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template