$arr = array(
array(
a1,
a2,
),
b,
array(
c1,
c2,
),
);
已知一个数组(如上代码),数组只有2层(a1,a2,c1,c2不为数组)。。怎样写一个方法让数组得到这样的字符串:a1bc1,a1bc2,a2bc1,a2bc2不管子数组有多少个,每个数组有多少项,每个数组取一个,要得到所有的组合。
array(
a1,
a2,
),
b,
array(
c1,
c2,
),
);
已知一个数组(如上代码),数组只有2层(a1,a2,c1,c2不为数组)。。怎样写一个方法让数组得到这样的字符串:a1bc1,a1bc2,a2bc1,a2bc2不管子数组有多少个,每个数组有多少项,每个数组取一个,要得到所有的组合。
解决方案 »
- phpExcel生成excel文件时的问题
- 在这基础上加入分页和添加
- 同一个页面的两个 select 传值 在线等
- 生成缩略图(不知道那里出错了.没有生成出来.但显示成功了)
- html中的<a href>中要显示的数据库字段显示不了?
- 请问怎么在一个空白单元格中做链接呢?
- 刚开发完成一个MySQL数据库动态创建系统,比phpMyAdmin要灵活方便多了,如果想要,跟我联系吧
- 发现很多.tmp临时文件,不知道是不是AMP其中一个生成的
- 如何使用PHP或者HTML,将一个CSV文档(WORD文档的一种),内嵌显示在IE里面?
- 请问一个Cookies的问题,很急,望帮忙!
- 很sb的问题,进来指点一下。
- 帮忙修改代码
foreach(arr[1] as b )
echo a.b;
}
{
foreach ($arr[2] as $val2)
{
echo $val . $arr[1] . $val2;
}
}
也可以是这样:
$arr = array(
array(a1,a2,),
b,
array(c1,c2,),
array(d1,d2,d3),
//......省略其它元素(也可以是数组),
);
如果是上述情况应该得到12组情况。
array(a1,a2,),
b,
array(c1,c2,),
array(d1,d2,d3),
//......省略其它元素(也可以是数组),
);
$r = Descartes( $arr );
print_r($r);
Array
(
[0] => Array
(
[0] => a1
[1] => b
[2] => c1
[3] => d1
) [1] => Array
(
[0] => a1
[1] => b
[2] => c1
[3] => d2
) [2] => Array
(
[0] => a1
[1] => b
[2] => c1
[3] => d3
) [3] => Array
(
[0] => a1
[1] => b
[2] => c2
[3] => d1
) [4] => Array
(
[0] => a1
[1] => b
[2] => c2
[3] => d2
) [5] => Array
(
[0] => a1
[1] => b
[2] => c2
[3] => d3
) [6] => Array
(
[0] => a2
[1] => b
[2] => c1
[3] => d1
) [7] => Array
(
[0] => a2
[1] => b
[2] => c1
[3] => d2
) [8] => Array
(
[0] => a2
[1] => b
[2] => c1
[3] => d3
) [9] => Array
(
[0] => a2
[1] => b
[2] => c2
[3] => d1
) [10] => Array
(
[0] => a2
[1] => b
[2] => c2
[3] => d2
) [11] => Array
(
[0] => a2
[1] => b
[2] => c2
[3] => d3
))
记得前几天已给出了函数 Descartes 的代码
//$conn 是mysql数据库连接资源
$arr = array(
array('a1','a2',),
'b',
array('c1','c2',),
array('d1','d2','d3'),
//......省略其它元素(也可以是数组),
);$sql = "";
foreach($arr AS $key => $val)
{
$tmp = is_array($val) ? "(SELECT '" . implode("' union SELECT '", $val) . "') AS tb_{$key}" : "(SELECT '{$val}') tb_{$key}";
$sql .= !empty($sql) ? " CROSS JOIN " . $tmp : $tmp;
}
$sql = "SELECT * FROM " . $sql;
$query = mysql_query($sql, $conn);
while($r = mysql_fetch_assoc($query))
{
echo join($r) . "\n";
}
/**
输出
a1bc1d1
a2bc1d1
a1bc2d1
a2bc2d1
a1bc1d2
a2bc1d2
a1bc2d2
a2bc2d2
a1bc1d3
a2bc1d3
a1bc2d3
a2bc2d3
/**/
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;
}
<?php
function comb($arrs) {
if (count($arrs) > 1) {
$temp = array();
foreach ($arrs[0] as $key => $n1) {
foreach ($arrs[1] as $n2) array_push($temp, "$n1$n2");
}
array_splice($arrs, 0, 2, array($temp));
return comb($arrs);
} else {
return $arrs[0];
}
}//--------------测试----------------+$arrs = array(
array(1, 2),
array(3, 4),
array(5, 6, 7),
array('a', 'b', 'c')
);foreach (comb($arrs) as $val) echo "$val<br>";/*
135a
135b
135c
136a
136b
136c
137a
137b
137c
145a
145b
145c
146a
146b
146c
147a
147b
147c
235a
235b
235c
236a
236b
236c
237a
237b
237c
245a
245b
245c
246a
246b
246c
247a
247b
247c
*/
?>