当前位置:网站首页>笛卡尔积处理商品属性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 )
?>
边栏推荐
猜你喜欢
随机推荐
【C语言】二分查找
看了都收藏的3D游戏建模全流程解析,角色模型就该这么做!
在Maya和ZBrush中制作战士模型
cb板上常用的电子元器件都有哪些?
Typora
域名怎么管理,域名管理注意事项有哪些?
二分查找6 - 寻找峰值
常见的电子元器件分类介绍
classpath:与classpath*的比较
八、抽象类的接口的区别
什么是国密SSL协议?国密证书与传统SSL证书有什么区别?
【C语言】输出100~200之间的素数/质数(3种方法)
SQLMAP介绍及使用
基于南航app直减自动出票
数组与字符串12-数组拆分
树——二叉排序树(BST)
电子元器件之电子变压器可分为哪几类?
二分查找3 - 猜数字大小
SolidWorks 操作视频 | 隐藏高手必备工具Defeature,让设计隐藏更彻底
double型数据转字符串后通过MCU串口发送