当前位置:网站首页>笛卡尔积处理商品属性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的第一天,尝试一下写博客
STM32启动文件的选择
ZEMAX | 在设计抬头显示器(HUD)时需要使用哪些工具?
003_旭日X3派初探:利用无线串口通信控制舵机
移动端人脸风格化技术的应用
什么是次世代建模,为什么这么多建模人在学习次世代建模流程
【记录】把json的所有key转换成小写
SSL证书验证怎么做?有几种方式?
ZEMAX | 如何倾斜和偏心序列光学元件
3. What is the difference between final, finally, and finalize?
MATLAB自带的dwt2和wavedec2函数实现基于小波变换的自适应阈值图像边缘检测
电容器和电池有什么不同?
VCC(电源)和 GND(地)之间电容的作用
内网渗透之PPT票据传递攻击(Pass the Ticket)
cb板上常用的电子元器件都有哪些?
IP数据包的格式(1)
JS--正则表达式
全球一流医疗技术公司如何最大程度提高设计工作效率 | SOLIDWORKS 产品探索
采用Trench肖特基二极管,实现功率密度的显著提升









