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

 3966

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

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


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


效果图


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

页面代码这里就不说了,sku的生成方式是根据所有规格进行组合,也就是数学上的笛卡尔积,我用php写了两种方式,记录一下。


第一种,生成字符串

  1. <?php
  2.  
  3. function Cartesian($data){
  4.     $len = count($data);
  5.  
  6.     for ($i = 0; $i< $len-1; $i++) {
  7.         if ($i === 0) {
  8.             // 数组第一个值
  9.             $result = $data[0];
  10.         }
  11.  
  12.         $temp = [];
  13.         // 数组第一个值和第二个值组合
  14.         foreach ($result as $res) {
  15.             //数组第二个值...$i+1
  16.             foreach($data[$i+1] as $sec){
  17.                 $temp[] = $res . '-' . $sec;
  18.             }
  19.             $result = $temp;
  20.         }
  21.     }
  22.  
  23.     return $result;
  24. }
  25.  
  26. //需要计算的数组
  27. $data = array(
  28.  array('白色','银色','玫瑰金'),
  29.  array('64G','128G'),
  30.  array('移动','电信','联通'),
  31.  array('国行','港版')
  32. );
  33.  
  34. //打印结果
  35. $result = Cartesian($data);
  36. print_r($result);
  37. ?>

实际开发中,你只要生成上面的二维数组就可以组合了,效果如下:

  1. Array
  2. (
  3.     [0] => 白色-64G-移动-国行
  4.     [1] => 白色-64G-移动-港版
  5.     [2] => 白色-64G-电信-国行
  6.     [3] => 白色-64G-电信-港版
  7.     [4] => 白色-64G-联通-国行
  8.     [5] => 白色-64G-联通-港版
  9.     [6] => 白色-128G-移动-国行
  10.     [7] => 白色-128G-移动-港版
  11.     [8] => 白色-128G-电信-国行
  12.     [9] => 白色-128G-电信-港版
  13.     [10] => 白色-128G-联通-国行
  14.     [11] => 白色-128G-联通-港版
  15.     [12] => 银色-64G-移动-国行
  16.     [13] => 银色-64G-移动-港版
  17.     [14] => 银色-64G-电信-国行
  18.     [15] => 银色-64G-电信-港版
  19.     [16] => 银色-64G-联通-国行
  20.     [17] => 银色-64G-联通-港版
  21.     [18] => 银色-128G-移动-国行
  22.     [19] => 银色-128G-移动-港版
  23.     [20] => 银色-128G-电信-国行
  24.     [21] => 银色-128G-电信-港版
  25.     [22] => 银色-128G-联通-国行
  26.     [23] => 银色-128G-联通-港版
  27.     [24] => 玫瑰金-64G-移动-国行
  28.     [25] => 玫瑰金-64G-移动-港版
  29.     [26] => 玫瑰金-64G-电信-国行
  30.     [27] => 玫瑰金-64G-电信-港版
  31.     [28] => 玫瑰金-64G-联通-国行
  32.     [29] => 玫瑰金-64G-联通-港版
  33.     [30] => 玫瑰金-128G-移动-国行
  34.     [31] => 玫瑰金-128G-移动-港版
  35.     [32] => 玫瑰金-128G-电信-国行
  36.     [33] => 玫瑰金-128G-电信-港版
  37.     [34] => 玫瑰金-128G-联通-国行
  38.     [35] => 玫瑰金-128G-联通-港版
  39. )


第二种,生成数组格式

  1. <?php
  2.  
  3. function Cartesian($data){
  4.     $len = count($data);
  5.  
  6.     // 取第一个集合数组值
  7.     $result = $data[0];
  8.     for ($i = 0; $i< $len-1; $i++) {
  9.         $arr1 = $result;
  10.         $result = [];
  11.         // 数组第一个值和第二个值组合
  12.         foreach ($arr1 as $res) {
  13.             //数组第二个值...$i+1
  14.             foreach($data[$i+1] as $sec){ 
  15.                 if(!is_array($res)) {
  16.                     $res = array($res);
  17.                 }
  18.                 if(!is_array($sec)){
  19.                     $sec = array($sec);
  20.                 }
  21.                 $result[] = array_merge_recursive($res,$sec);
  22.             }
  23.         }
  24.  
  25.     }
  26.  
  27.     return $result;
  28. }
  29.  
  30.  
  31. //需要计算的数组
  32. $data = array(
  33.  array('白色','银色','玫瑰金'),
  34.  array('64G','128G'),
  35.  array('移动','电信','联通'),
  36.  array('国行','港版')
  37. );
  38.  
  39. //打印结果
  40. $result = Cartesian($data);
  41. print_r($result);
  42.  
  43. ?>

输出打印结果

  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => 白色
  6.             [1] => 64G
  7.             [2] => 移动
  8.             [3] => 国行
  9.         )
  10.  
  11.     [1] => Array
  12.         (
  13.             [0] => 白色
  14.             [1] => 64G
  15.             [2] => 移动
  16.             [3] => 港版
  17.         )
  18.  
  19.     [2] => Array
  20.         (
  21.             [0] => 白色
  22.             [1] => 64G
  23.             [2] => 电信
  24.             [3] => 国行
  25.         )
  26.  
  27.     [3] => Array
  28.         (
  29.             [0] => 白色
  30.             [1] => 64G
  31.             [2] => 电信
  32.             [3] => 港版
  33.         )
  34.  
  35.     [4] => Array
  36.         (
  37.             [0] => 白色
  38.             [1] => 64G
  39.             [2] => 联通
  40.             [3] => 国行
  41.         )
  42.  
  43.     [5] => Array
  44.         (
  45.             [0] => 白色
  46.             [1] => 64G
  47.             [2] => 联通
  48.             [3] => 港版
  49.         )
  50.  
  51.     [6] => Array
  52.         (
  53.             [0] => 白色
  54.             [1] => 128G
  55.             [2] => 移动
  56.             [3] => 国行
  57.         )
  58.  
  59.     [7] => Array
  60.         (
  61.             [0] => 白色
  62.             [1] => 128G
  63.             [2] => 移动
  64.             [3] => 港版
  65.         )
  66.  
  67.     [8] => Array
  68.         (
  69.             [0] => 白色
  70.             [1] => 128G
  71.             [2] => 电信
  72.             [3] => 国行
  73.         )
  74.  
  75.     [9] => Array
  76.         (
  77.             [0] => 白色
  78.             [1] => 128G
  79.             [2] => 电信
  80.             [3] => 港版
  81.         )
  82.  
  83.     [10] => Array
  84.         (
  85.             [0] => 白色
  86.             [1] => 128G
  87.             [2] => 联通
  88.             [3] => 国行
  89.         )
  90.  
  91.     [11] => Array
  92.         (
  93.             [0] => 白色
  94.             [1] => 128G
  95.             [2] => 联通
  96.             [3] => 港版
  97.         )
  98.  
  99.     [12] => Array
  100.         (
  101.             [0] => 银色
  102.             [1] => 64G
  103.             [2] => 移动
  104.             [3] => 国行
  105.         )
  106.  
  107.     [13] => Array
  108.         (
  109.             [0] => 银色
  110.             [1] => 64G
  111.             [2] => 移动
  112.             [3] => 港版
  113.         )
  114.  
  115.     [14] => Array
  116.         (
  117.             [0] => 银色
  118.             [1] => 64G
  119.             [2] => 电信
  120.             [3] => 国行
  121.         )
  122.  
  123.     [15] => Array
  124.         (
  125.             [0] => 银色
  126.             [1] => 64G
  127.             [2] => 电信
  128.             [3] => 港版
  129.         )
  130.  
  131.     [16] => Array
  132.         (
  133.             [0] => 银色
  134.             [1] => 64G
  135.             [2] => 联通
  136.             [3] => 国行
  137.         )
  138.  
  139.     [17] => Array
  140.         (
  141.             [0] => 银色
  142.             [1] => 64G
  143.             [2] => 联通
  144.             [3] => 港版
  145.         )
  146.  
  147.     [18] => Array
  148.         (
  149.             [0] => 银色
  150.             [1] => 128G
  151.             [2] => 移动
  152.             [3] => 国行
  153.         )
  154.  
  155.     [19] => Array
  156.         (
  157.             [0] => 银色
  158.             [1] => 128G
  159.             [2] => 移动
  160.             [3] => 港版
  161.         )
  162.  
  163.     [20] => Array
  164.         (
  165.             [0] => 银色
  166.             [1] => 128G
  167.             [2] => 电信
  168.             [3] => 国行
  169.         )
  170.  
  171.     [21] => Array
  172.         (
  173.             [0] => 银色
  174.             [1] => 128G
  175.             [2] => 电信
  176.             [3] => 港版
  177.         )
  178.  
  179.     [22] => Array
  180.         (
  181.             [0] => 银色
  182.             [1] => 128G
  183.             [2] => 联通
  184.             [3] => 国行
  185.         )
  186.  
  187.     [23] => Array
  188.         (
  189.             [0] => 银色
  190.             [1] => 128G
  191.             [2] => 联通
  192.             [3] => 港版
  193.         )
  194.  
  195.     [24] => Array
  196.         (
  197.             [0] => 玫瑰金
  198.             [1] => 64G
  199.             [2] => 移动
  200.             [3] => 国行
  201.         )
  202.  
  203.     [25] => Array
  204.         (
  205.             [0] => 玫瑰金
  206.             [1] => 64G
  207.             [2] => 移动
  208.             [3] => 港版
  209.         )
  210.  
  211.     [26] => Array
  212.         (
  213.             [0] => 玫瑰金
  214.             [1] => 64G
  215.             [2] => 电信
  216.             [3] => 国行
  217.         )
  218.  
  219.     [27] => Array
  220.         (
  221.             [0] => 玫瑰金
  222.             [1] => 64G
  223.             [2] => 电信
  224.             [3] => 港版
  225.         )
  226.  
  227.     [28] => Array
  228.         (
  229.             [0] => 玫瑰金
  230.             [1] => 64G
  231.             [2] => 联通
  232.             [3] => 国行
  233.         )
  234.  
  235.     [29] => Array
  236.         (
  237.             [0] => 玫瑰金
  238.             [1] => 64G
  239.             [2] => 联通
  240.             [3] => 港版
  241.         )
  242.  
  243.     [30] => Array
  244.         (
  245.             [0] => 玫瑰金
  246.             [1] => 128G
  247.             [2] => 移动
  248.             [3] => 国行
  249.         )
  250.  
  251.     [31] => Array
  252.         (
  253.             [0] => 玫瑰金
  254.             [1] => 128G
  255.             [2] => 移动
  256.             [3] => 港版
  257.         )
  258.  
  259.     [32] => Array
  260.         (
  261.             [0] => 玫瑰金
  262.             [1] => 128G
  263.             [2] => 电信
  264.             [3] => 国行
  265.         )
  266.  
  267.     [33] => Array
  268.         (
  269.             [0] => 玫瑰金
  270.             [1] => 128G
  271.             [2] => 电信
  272.             [3] => 港版
  273.         )
  274.  
  275.     [34] => Array
  276.         (
  277.             [0] => 玫瑰金
  278.             [1] => 128G
  279.             [2] => 联通
  280.             [3] => 国行
  281.         )
  282.  
  283.     [35] => Array
  284.         (
  285.             [0] => 玫瑰金
  286.             [1] => 128G
  287.             [2] => 联通
  288.             [3] => 港版
  289.         )
  290.  
  291. )


本文系转载,原文地址:https://juejin.cn/post/7170889538343501838

TAG标签:
本文网址:https://www.zztuku.com/index.php/detail-13428.html
站长图库 - PHP开发商品批量生成sku组合(两种方式)
申明:本文转载于《掘金社区》,如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐