当前位置:网站首页>笛卡尔积处理商品属性sku
笛卡尔积处理商品属性sku
2022-08-03 05:26:00 【dd00bb】
笛卡尔积
笛卡尔积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X*Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}
实现思路
1.先计算第一个集合和第二个集合的笛卡尔积,把结果保存为一个新集合。
2.然后再用新集合与下一个集合计算笛卡尔积,依此循环直到与最后一个集合计算笛卡尔积。
php代码
<?php
class testModule
{
public function diker($arr)
{
// 删除并返回第一元素
$result = array_shift($arr);
// 取第二组数据,开始遍历
while ($curArr = array_shift($arr)) {
// 两组数据组合后产生新的数组,再次与后面的数组进行组合
$lastArr = $result;
$result = array();
foreach ($lastArr as $lastVal) {
// 判断是否是数组,不是转成数组
if (!is_array($lastVal)) {
$lastVal = array($lastVal);
}
foreach ($curArr as $curVal) {
if (!is_array($curVal)) {
$curVal = array($curVal);
}
// 两组数据组合成新的数组
$result[] = array_merge_recursive($lastVal, $curVal);
}
}
}
return $result;
}
public function index()
{
$arr = array(
array(1, 2, 3),
array('爱', '中', '国'),
array('a', 'b', 'c'),
);
$dkRes = $this->diker($arr);
if (is_array($dkRes)) {
foreach ($dkRes as $val) {
print_r($val);
echo "<br/>";
}
} else {
var_dump($dkRes);
}
}
// 输出结果
// Array ( [0] => 1 [1] => 爱 [2] => a )
// Array ( [0] => 1 [1] => 爱 [2] => b )
// Array ( [0] => 1 [1] => 爱 [2] => c )
// Array ( [0] => 1 [1] => 中 [2] => a )
// Array ( [0] => 1 [1] => 中 [2] => b )
// Array ( [0] => 1 [1] => 中 [2] => c )
// Array ( [0] => 1 [1] => 国 [2] => a )
// Array ( [0] => 1 [1] => 国 [2] => b )
// Array ( [0] => 1 [1] => 国 [2] => c )
// Array ( [0] => 2 [1] => 爱 [2] => a )
// Array ( [0] => 2 [1] => 爱 [2] => b )
// Array ( [0] => 2 [1] => 爱 [2] => c )
// Array ( [0] => 2 [1] => 中 [2] => a )
// Array ( [0] => 2 [1] => 中 [2] => b )
// Array ( [0] => 2 [1] => 中 [2] => c )
// Array ( [0] => 2 [1] => 国 [2] => a )
// Array ( [0] => 2 [1] => 国 [2] => b )
// Array ( [0] => 2 [1] => 国 [2] => c )
// Array ( [0] => 3 [1] => 爱 [2] => a )
// Array ( [0] => 3 [1] => 爱 [2] => b )
// Array ( [0] => 3 [1] => 爱 [2] => c )
// Array ( [0] => 3 [1] => 中 [2] => a )
// Array ( [0] => 3 [1] => 中 [2] => b )
// Array ( [0] => 3 [1] => 中 [2] => c )
// Array ( [0] => 3 [1] => 国 [2] => a )
// Array ( [0] => 3 [1] => 国 [2] => b )
// Array ( [0] => 3 [1] => 国 [2] => c )
?>
边栏推荐
猜你喜欢
随机推荐
零基础小白想往游戏建模方向发展,3D游戏建模好学嘛?
【C语言】斐波那契数列
一文看懂常见域名后缀的含义
servlet learning (7) ServletContext
ZBrush+Substance Designer2021制作高品质3D角色模型全流程!
ZEMAX | 如何使用ZOS-API创建自定义操作数
2021-04-30
各种cms getshell技巧
数组与字符串11-反转字符串
3d建模师为什么不建议入行
ZEMAX | 在设计抬头显示器(HUD)时需要使用哪些工具?
【3D建模制作技巧分享】ZBrush快捷键如何设置
九、请介绍类加载过程,什么是双亲委派模型?
二分查找4 - 搜索旋转排序数组
BurpSuite 进阶玩法
802.1AS的BMCA(最佳主时钟选举)理解
MATLAB自带的dwt2和wavedec2函数实现基于小波变换的自适应阈值图像边缘检测
中空编码器的作用——唯样商城
次世代建模到底需要哪些美术基础
How the world's leading medical technology company maximizes design productivity | SOLIDWORKS Product Exploration