PHP中如何列出一个数组的所有规定组合?

比方:$arr=array('0'=>array(8,9),'0'=>array(5),'2'=>array(1,2));$arr是一个多维数组,$arr中含有3个数组,... 比方:
$arr = array(
'0'=>array(8,9),
'0'=>array(5),
'2'=>array(1,2)
);

$arr 是一个多维数组,$arr中含有3个数组,如何在子数组中各取1个键值,列出所有不同的3位数组合,同数组的数值只出现一次。

变成以下数组:
$arr = array(
'0'=>'851',
'1'=>'951',
'2'=>'852',
'4'=>'952'
);

请问PHP代码如何写?
展开
 我来答
学海无涯回头是案
高粉答主

2019-01-08 · 醉心答题,欢迎关注
知道大有可为答主
回答量:1.7万
采纳率:80%
帮助的人:840万
展开全部

嵌套循环,代码如下:

$arr = array('0'=>array(8,9),'1'=>array(5),'2'=>array(1,2));
$arr2 = array();
foreach ($arr[0] as $v1) {
foreach($arr[1] as $v2){
foreach($arr[2] as $v3){
$arr2[] = $v1.$v2.$v3;
}
}
}
print_r($arr2);
追问
原始$arr数组的长度可变,比方我的原始数组变成这样就不行了
$arr = array('0'=>array(8,9), '1'=>array(5), '2'=>array(1,2), '3'=>array(4,6));
生成一维数组的排列组合中的数值长度等于count($arr)。
这样就会生成8个数组元素:
8514、8516、9514、9516、8524、8526、9524、9526
追答

动态数组的话,循环构建代码,然后eval

$arr = array('0'=>array(8,9),'1'=>array(5),'2'=>array(1,2),'3'=>array(4,6));
$arr2 = array();
$code = '';
for($i=0;$i<count($arr);$i++)
{
$code .= 'foreach ($arr['.$i.'] as $v'.($i+1).') {';
}
$code .= '$arr2[]=';
for($i=0;$i<count($arr);$i++)
{
$code .= '$v'.($i+1).'.';
}
$code = substr($code, 0,-1);
$code .= ';'; 
for($i=0;$i<count($arr);$i++)
{
$code .= '}';
}
eval($code);

print_r($arr2);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式