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]
Rendering
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.
<?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); ?>
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-联通-港版 )
<?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); ?>
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] => 港版 ) )
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!