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+mysql写的简单留言本实例代码
Jul 25 PHP
一个PHP缓存类代码(附详细说明)
Jun 09 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
微信公众平台开发实现2048游戏的方法
Apr 15 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
php中preg_replace_callback函数简单用法示例
Jul 21 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 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
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
js中开关变量使用实例
2017/02/24 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
实例代码讲解Python 线程池
2020/08/24 Python
python中的列表和元组区别分析
2020/12/30 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
学校采购员岗位职责
2014/01/02 职场文书
梅花魂教学反思
2014/04/25 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
色戒观后感
2015/06/12 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
担保书范文
2019/07/09 职场文书
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android