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 相关文章推荐
安装APACHE
Jan 15 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
百度ping方法使用示例 自动ping百度
Jan 26 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 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 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python基本语法经典教程
2016/03/11 Python
Python实现Dijkstra算法
2018/10/17 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
禁毒宣传活动总结
2014/08/26 职场文书
2014年质量工作总结
2014/11/22 职场文书
Python中with上下文管理协议的作用及用法
2022/03/18 Python