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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
php引用地址改变变量值的问题
Mar 23 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
Apr 07 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中socket的用法详解
2014/10/24 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python flask实现分页的示例代码
2018/08/02 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
管理信息系学生的自我评价
2014/01/11 职场文书
贷款委托书范本
2014/04/08 职场文书
趣味运动会策划方案
2014/06/02 职场文书
出国签证在职证明
2014/09/20 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript