笛卡尔积算法,二维数组矩阵算法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。
- 上一篇: 微信支付配置信息动态获取数据库获取
- 下一篇:没有了
