Kombinationen aller Subarray-Elemente ohne Wiederholungen
Ich habe "Attribute" aus der Datenbank. Jedes Attribut hat viele Werte. Jetzt möchte ich diese Werte mischen, um eindeutige Kombinationen zu erstellen.
Beispiel der Eingabe:
$a = array(
35=>array('green','red','brown'),
36=>array('fox','house','dog')
);
output - alle möglichen Kombinationen der Elemente der zweiten Dimension. Beispielausgabe unten:
$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'),
);
meine Funktion ohne Wiederholung:
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;
}