(相关资料图)
近期在开发一个电商系统,做到了商品模块。虽然增删改查在所难免,但是商品这块更多的是js的调用等效果。还有更为重要的就是商品sku的批量生成与组合了。不同的系统有不同的需求,以下的需求就是要添加完各种规格后批量生成sku的。【推荐学习:PHP视频教程】
效果图
页面代码这里就不说了,sku的生成方式是根据所有规格进行组合,也就是数学上的笛卡尔积,我用php写了两种方式,记录一下。
第一种,生成字符串
<?phpfunction 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-联通-港版)
第二种,生成数组格式
<?phpfunction 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组合(两种方式)的详细内容,更多请关注php中文网其它相关文章!