PHP笛卡尔积实现原理及代码实例


Posted in PHP onDecember 09, 2020

笛卡尔积是指在数学中,两个集合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 feof用来识别文件末尾字符的方法
Aug 01 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 PHP
第二章 PHP入门基础之php代码写法
Dec 30 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
PHP输出日历表代码实例
Mar 27 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
php实现统计网站在线人数的方法
May 12 PHP
腾讯CMEM的PHP扩展编译安装方法
Sep 25 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP基于进程控制函数实现多线程
Dec 09 #PHP
PHP如何防止用户重复提交表单
Dec 09 #PHP
Nginx+php配置文件及原理解析
Dec 09 #PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 #PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 09 #PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 #PHP
PHP大文件分割分片上传实现代码
Dec 09 #PHP
You might like
数据库相关问题
2006/10/09 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
javascript中length属性的探索
2011/07/31 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
python与php实现分割文件代码
2017/03/06 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
Python操作qml对象过程详解
2019/09/26 Python
python多维数组分位数的求取方式
2020/03/03 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
工作证明范本(2篇)
2014/09/14 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
党性分析自查总结
2014/10/14 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书