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 相关文章推荐
php5编程中的异常处理详细方法介绍
Jul 29 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
php的dl函数用法实例
Nov 06 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
从wamp到xampp的升级之路
Apr 08 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
php学习笔记之字符串常见操作总结
Jul 16 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/10/09 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
学习python的几条建议分享
2013/02/10 Python
Python的subprocess模块总结
2014/11/07 Python
Python运用于数据分析的简单教程
2015/03/27 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
喜之郎果冻广告词
2014/03/20 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
生产实习心得体会范文
2016/01/22 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
解析redis hash应用场景和常用命令
2021/08/04 Redis