笛卡尔积算法,二维数组矩阵算法PHP
递归实现
$arr = array( array(1), array(2,3), array(4,5,6) ); fun($arr); print_r($res); function fun($arr, $tmp = array()) { foreach(array_shift($arr) AS $v) { $tmp[] = $v; if($arr) { fun($arr, $tmp); } else { $GLOBALS["res"][] = $tmp; } array_pop($tmp); } }
foreach,遍历每个元素元素,进行递归。
如:
1,2 4 5 6 => 1,2,4 1,2,5 1,2,6
1,3 4 5 6 => 1,3,4 1,3,5 1,3,6
举例:
$arr = array( "a"=>array("a1","a2","a3"), "b"=>array("b1","b2","b3"), "c"=>array("c1","c2","c3"), //..........多行...... ); fun($arr); //print_r($res); echo "<table width="150px" border="1">"; $j=0; echo "<tr>"; echo "<td>序号</td>"; foreach($arr as $k=>$v) { echo "<td>".$k."</td>"; } echo "</tr>"; foreach($res as $v) { echo "<tr>"; $i=0; $j++; echo "<td>".$j."</td>"; foreach($arr as $value) { echo "<td>".$v[$i]."</td>"; $i++; } echo "</tr>"; } echo "</table>"; function fun($arr, $tmp = array()) { foreach(array_shift($arr) AS $v) { $tmp[] = $v; if($arr) { fun($arr, $tmp); } else { $GLOBALS["res"][] = $tmp; } array_pop($tmp); } } exit;
非递归:(其实也类似递归)
$arr = array( array("a1","a2",), array("c1","c2",), array("d1","d2","d3"), //......省略其它元素(也可以是数组), ); $r = Descartes( $arr ); print_r($r); function Descartes() { $t = func_get_args(); if(func_num_args() == 1) return call_user_func_array( __FUNCTION__, $t[0] ); $a = array_shift($t); if(! is_array($a)) $a = array($a); $a = array_chunk($a, 1); do { $r = array(); $b = array_shift($t); if(! is_array($b)) $b = array($b); foreach($a as $p) foreach(array_chunk($b, 1) as $q) $r[] = array_merge($p, $q); $a = $r; } while($t); return $r; } exit;
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: 微信支付配置信息动态获取数据库获取
- 下一篇:没有了