近期在开发一个电商系统,做到了商品模块。虽然增删改查在所难免,但是商品这块更多的是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
标签

评论(0条)

请 登录 后查看评论

标签云