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 相关文章推荐
mysql建立外键
Nov 25 PHP
收集的DedeCMS一些使用经验
Mar 17 PHP
PHP中的错误处理、异常处理机制分析
May 07 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
详解PHP中的PDO类
Jul 06 PHP
php计算税后工资的方法
Jul 28 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
May 28 PHP
PHP实现唤起微信支付功能
Feb 18 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 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
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
vue权限路由实现的方法示例总结
2018/07/29 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
Python之web模板应用
2017/12/26 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
公证委托书格式
2014/09/13 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
写给父母的感谢信
2015/01/22 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
python实现简单的井字棋
2021/05/26 Python
手残删除python之后的补救方法
2021/06/26 Python
Linux中sftp常用命令整理
2022/06/28 Servers