php计算多个集合的笛卡尔积实例详解

简介:

笛卡尔积

笛卡尔积是指在数学中,两个集合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)}

实现思路

先计算第一个集合和第二个集合的笛卡尔积,把结果保存为一个新集合。 

然后再用新集合与下一个集合计算笛卡尔积,依此循环直到与最后一个集合计算笛卡尔积。

例如有以下几个集合,需要计算笛卡尔积

1
2
3
4
5
6
7
8
<?php
$sets  array (
  array ( '白色' , '黑色' , '红色' ),
  array ( '透气' , '防滑' ),
  array ( '37码' , '38码' , '39码' ),
  array ( '男款' , '女款' )
);
?>

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?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 );
  
?>

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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能带来一定的帮助,如果有疑问大家可以留言交流。











本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/1904744,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
PHP
php计算时间差转化时间戳函数strtotime
php计算时间差转化时间戳函数strtotime
46 0
|
4月前
|
网络安全 PHP
[网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)
[网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)
40 0
|
9月前
|
SQL JSON 关系型数据库
php执行语句在MySQL批量插入大数据量的解决方案及计算程序执行时间(大数据量、MySQL语句优化)
php执行语句在MySQL批量插入大数据量的解决方案及计算程序执行时间(大数据量、MySQL语句优化)
197 1
|
9月前
|
安全 PHP
漏刻有时php集合layui动态表格翻页和搜索的代码分析
漏刻有时php集合layui动态表格翻页和搜索的代码分析
55 0
|
9月前
|
PHP
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
39 0
|
9月前
|
定位技术 PHP
php基于百度地图封装的对象类实现计算地图上两点间的距离和地理编码
php基于百度地图封装的对象类实现计算地图上两点间的距离和地理编码
60 0
|
9月前
|
PHP
php计算两个坐标点之间的距离的类
php计算两个坐标点之间的距离的类
72 0