php计算多个集合的笛卡尔积实例详解


Posted in PHP onFebruary 16, 2017

笛卡尔积

笛卡尔积是指在数学中,两个集合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)}

实现思路

先计算第一个集合和第二个集合的笛卡尔积,把结果保存为一个新集合。

然后再用新集合与下一个集合计算笛卡尔积,依此循环直到与最后一个集合计算笛卡尔积。

例如有以下几个集合,需要计算笛卡尔积

<?php
$sets = array(
 array('白色','黑色','红色'),
 array('透气','防滑'),
 array('37码','38码','39码'),
 array('男款','女款')
);
?>

代码如下:

<?php
/**
 * php 计算多个集合的笛卡尔积
 * Date: 2017-01-10
 * Author: fdipzone
 * Ver: 1.0
 *
 * Func
 * CartesianProduct 计算多个集合的笛卡尔积
 */

/**
 * 计算多个集合的笛卡尔积
 * @param Array $sets 集合数组
 * @return Array
 */
function CartesianProduct($sets){

 // 保存结果
 $result = array();

 // 循环遍历集合数据
 for($i=0,$count=count($sets); $i<$count-1; $i++){

 // 初始化
 if($i==0){
  $result = $sets[$i];
 }

 // 保存临时数据
 $tmp = array();

 // 结果与下一个集合计算笛卡尔积
 foreach($result as $res){
  foreach($sets[$i+1] as $set){
  $tmp[] = $res.$set;
  }
 }

 // 将笛卡尔积写入结果
 $result = $tmp;

 }

 return $result;

}

// 定义集合
$sets = array(
 array('白色','黑色','红色'),
 array('透气','防滑'),
 array('37码','38码','39码'),
 array('男款','女款')
);

$result = CartesianProduct($sets);
print_r($result);

?>

输出:

Array
(
 [0] => 白色透气37码男款
 [1] => 白色透气37码女款
 [2] => 白色透气38码男款
 [3] => 白色透气38码女款
 [4] => 白色透气39码男款
 [5] => 白色透气39码女款
 [6] => 白色防滑37码男款
 [7] => 白色防滑37码女款
 [8] => 白色防滑38码男款
 [9] => 白色防滑38码女款
 [10] => 白色防滑39码男款
 [11] => 白色防滑39码女款
 [12] => 黑色透气37码男款
 [13] => 黑色透气37码女款
 [14] => 黑色透气38码男款
 [15] => 黑色透气38码女款
 [16] => 黑色透气39码男款
 [17] => 黑色透气39码女款
 [18] => 黑色防滑37码男款
 [19] => 黑色防滑37码女款
 [20] => 黑色防滑38码男款
 [21] => 黑色防滑38码女款
 [22] => 黑色防滑39码男款
 [23] => 黑色防滑39码女款
 [24] => 红色透气37码男款
 [25] => 红色透气37码女款
 [26] => 红色透气38码男款
 [27] => 红色透气38码女款
 [28] => 红色透气39码男款
 [29] => 红色透气39码女款
 [30] => 红色防滑37码男款
 [31] => 红色防滑37码女款
 [32] => 红色防滑38码男款
 [33] => 红色防滑38码女款
 [34] => 红色防滑39码男款
 [35] => 红色防滑39码女款
)

总结

以上就是利用php实现计算多个集合的笛卡尔积的全部内容了,希望本文的内容对大家学习或者使用PHP能带来一定的帮助,如果有疑问大家可以留言交流。

PHP 相关文章推荐
js下函数般调用正则的方法附代码
Jun 22 PHP
mayfish 数据入库验证代码
Apr 30 PHP
php在文件指定行中写入代码的方法
May 23 PHP
PHP MSSQL 分页实例
Apr 13 PHP
php实现转换html格式为文本格式的方法
May 16 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
php curl常用的5个经典例子
Jan 20 PHP
替换php字符串中的单引号为双引号的方法
Feb 16 PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 PHP
提高Laravel应用性能方法详解
Jun 24 PHP
PHP反射原理与用法深入分析
Sep 28 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 #PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 #PHP
php使用PDO执行SQL语句的方法分析
Feb 16 #PHP
php四种定界符详解
Feb 16 #PHP
php使用PDO获取结果集的方法
Feb 16 #PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 #PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 #PHP
You might like
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
PHP获取网站域名和地址的代码
2008/08/17 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
深入学习Python中的装饰器使用
2016/06/20 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
行政专员工作职责
2013/12/22 职场文书
怎样写演讲稿
2014/01/04 职场文书
升职演讲稿范文
2014/05/23 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis