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 相关文章推荐
PHP 高手之路(三)
Oct 09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
php模板原理讲解
Nov 13 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 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
第三节--定义一个类
2006/11/16 PHP
PHP 七大优势分析
2009/06/23 PHP
由php的call_user_func传reference引发的思考
2010/07/23 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
brook javascript框架介绍
2011/10/10 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
Python新手学习装饰器
2020/06/04 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
英国最大的百货公司:Harrods
2016/08/18 全球购物
翻译学院毕业生自荐书
2014/02/02 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
孔子观后感
2015/06/08 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
图书借阅制度范本
2015/08/06 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle