当前位置:网站首页>笛卡尔积处理商品属性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 )
?>
边栏推荐
- 【面筋1】一些没什么标准答案的问题
- 快速的将结构体各成员清零
- 贴片电阻的结构是怎样的?唯样商城
- 【3D建模制作技巧分享】ZBrush快捷键如何设置
- ZEMAX | 探究 OpticStudio 偏振分析功能
- Automatic ticket issuance based on direct reduction of China Southern Airlines app
- 嘿!selenium自动下载driver版本,得知道一下
- How the world's leading medical technology company maximizes design productivity | SOLIDWORKS Product Exploration
- 六、对比Vector、ArrayList、LinkedList有何区别?(设计、性能、安全)
- 剑指 Offer II 001. 整数除法
猜你喜欢
随机推荐
ue4入门学习笔记1(操作界面)
在大程序中怎么样显示LED点阵
【3D建模制作技巧分享】ZBrush快捷键如何设置
【面筋1】一些没什么标准答案的问题
电容器和电池有什么不同?
常见的电子元器件分类介绍
全球一流医疗技术公司如何最大程度提高设计工作效率 | SOLIDWORKS 产品探索
2021-03-22
3D建模:做什么副业在家就能月入1W?
NIO知识汇总 收藏这一篇就够了!!!
贴片电阻的结构是怎样的?唯样商城
内网渗透信息收集
【3D建模制作技巧分享】ZBrush快捷键如何设置
电子元器件的分类有哪些?
3d建模师为什么不建议入行
各种cms getshell技巧
九、请介绍类加载过程,什么是双亲委派模型?
ZBrush+Substance Designer2021制作高品质3D角色模型全流程!
关于芯片你了解吗?
队列方法接收串口的数据