【发布时间】:2015-05-19 17:34:09
【问题描述】:
我有来自数据库的“属性”。每个属性都有许多值。现在我想混合这些值来创建独特的组合。
输入示例:
$a = array(
35=>array('green','red','brown'),
36=>array('fox','house','dog')
);
输出 - 二维元素的所有可能组合。下面的示例输出:
$output = array(
array(35=>'green',36=>'fox'),
array(35=>'green',36=>'house'),
array(35=>'green',36=>'dog'),
array(35=>'red',36=>'fox'),
array(35=>'red',36=>'house'),
array(35=>'red',36=>'dog'),
array(35=>'brown',36=>'fox'),
array(35=>'brown',36=>'house'),
array(35=>'brown',36=>'dog'),
);
我的函数没有重复:
function myfunction($a){
$keys = array_keys($a);
$result = array();
if(count($keys)==0){
$result = array();
}
elseif(count($keys)==1){
$k = $keys[0];
foreach($a[$k] as $v){
$result[] = array($k=>$v);
}
}
elseif(count($keys)==2){
$k1 = $keys[0];
$k2 = $keys[1];
foreach($a[$k1] as $v1){
foreach($a[$k2] as $v2){
$result[] = array($k1=>$v1,$k2=>$v2);
}
}
}
elseif(count($keys)==3){
$k1 = $keys[0];
$k2 = $keys[1];
$k3 = $keys[2];
foreach($a[$k1] as $v1){
foreach($a[$k2] as $v2){
foreach($a[$k3] as $v3){
$result[] = array($k1=>$v1,$k2=>$v2,$k3=>$v3);
}
}
}
}
else{
throw new Exception('To much keys', 1);
}
return $result;
}
【问题讨论】:
-
那么您有一个多维数组
$a,其中包含您想要从中创建所有组合的值?组合应该始终包含 2 个值还是每个数组中只有一个值? (例如,如果你有 3 个数组,每个组合应该有 3 个值还是 2 个?) -
每个组合中的元素数量等于第一维数组键的数量。每个“子数组”中的一个值(来自第二维的数组)。
-
您现在在 SO 上有两次这个问题:stackoverflow.com/q/29120826/3933332 我认为您可以删除另一个,因为您首先在 SO 上发布了这个问题
标签: php arrays algorithm recursion combinations