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 相关文章推荐
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
Dec 17 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 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中intval()等int转换时的意外异常情况
2013/06/21 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
自己编写的类似JS的trim方法
2013/10/09 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
python的keyword模块用法实例分析
2015/06/30 Python
Python中方法链的使用方法
2016/02/23 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
经济系大学生求职信
2013/10/01 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
公司投资建议书
2014/05/16 职场文书
银行求职信范文
2014/05/26 职场文书
建议书格式
2015/02/04 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
胡桃夹子观后感
2015/06/11 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android