PHP笛卡尔积实现算法示例
2018-09-07 13:50
本文实例讲述了PHP笛卡尔积实现算法。分享给大家供大家参考,具体如下:
<?php $arr = array(array(1,3,4,5),array(3,5,7,9),array(76,6,1,0)); /** ** 实现二维数组的笛卡尔积组合 ** $arr 要进行笛卡尔积的二维数组 ** $str 最终实现的笛卡尔积组合,可不写 ** @return array **/ function cartesian($arr,$str = array()){ //去除第一个元素 $first = array_shift($arr); //判断是否是第一次进行拼接 if(count($str) > 1) { foreach ($str as $k => $val) { foreach ($first as $key => $value) { //最终实现的格式 1,3,76 //可根据具体需求进行变更 $str2[] = $val.,.$value; } } }else{ foreach ($first as $key => $value) { //最终实现的格式 1,3,76 //可根据具体需求进行变更 $str2[] = $value; } } //递归进行拼接 if(count($arr) > 0){ $str2 = cartesian($arr,$str2); } //返回最终笛卡尔积 return $str2; } $cartesian_product = cartesian($arr); print_r($cartesian_product); ?>
最终输出格式
  Array
 (
 [0] => 1,3,76
 [1] => 1,3,6
 [2] => 1,3,1
 [3] => 1,3,0
 [4] => 1,5,76
 [5] => 1,5,6
 [6] => 1,5,1
 [7] => 1,5,0
 [8] => 1,7,76
 [9] => 1,7,6
 [10] => 1,7,1
 [11] => 1,7,0
 [12] => 1,9,76
 [13] => 1,9,6
 [14] => 1,9,1
 [15] => 1,9,0
 [16] => 3,3,76
 [17] => 3,3,6
 [18] => 3,3,1
 [19] => 3,3,0
 [20] => 3,5,76
 [21] => 3,5,6
 [22] => 3,5,1
 [23] => 3,5,0
 [24] => 3,7,76
 [25] => 3,7,6
 [26] => 3,7,1
 [27] => 3,7,0
 [28] => 3,9,76
 [29] => 3,9,6
 [30] => 3,9,1
 [31] => 3,9,0
 [32] => 4,3,76
 [33] => 4,3,6
 [34] => 4,3,1
 [35] => 4,3,0
 [36] => 4,5,76
 [37] => 4,5,6
 [38] => 4,5,1
 [39] => 4,5,0
 [40] => 4,7,76
 [41] => 4,7,6
 [42] => 4,7,1
 [43] => 4,7,0
 [44] => 4,9,76
 [45] => 4,9,6
 [46] => 4,9,1
 [47] => 4,9,0
 [48] => 5,3,76
 [49] => 5,3,6
 [50] => 5,3,1
 [51] => 5,3,0
 [52] => 5,5,76
 [53] => 5,5,6
 [54] => 5,5,1
 [55] => 5,5,0
 [56] => 5,7,76
 [57] => 5,7,6
 [58] => 5,7,1
 [59] => 5,7,0
 [60] => 5,9,76
 [61] => 5,9,6
 [62] => 5,9,1
 [63] => 5,9,0
 )
小编这里参考前面一篇《JavaScript笛卡尔积超简单实现算法》,给出一个php计算笛卡尔积的超简单算法示例如下:
<?php function cartesian($arr1,$arr2){ $relarr = array(); foreach($arr1 as $v1){ foreach($arr2 as $v2){ array_push($relarr,$v1.,.$v2); } } return $relarr; } //用法示例 $a = array(1,2,3); $b = array(a,b,c); print_r(cartesian($a,$b)); ?>
运行结果:
  Array
 (
 [0] => 1,a
 [1] => 1,b
 [2] => 1,c
 [3] => 2,a
 [4] => 2,b
 [5] => 2,c
 [6] => 3,a
 [7] => 3,b
 [8] => 3,c
 )
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》及《php程序设计算法总结》
希望本文所述对大家PHP程序设计有所帮助。