У меня есть этот многомерный массив, из которого я хочу вычислить различные комбинации элементов массива. Вот массив:
$komponenten = array(
"Rrahmen" => array(
"Laenge" => array("400", "500"),
"Breite" => array("400", "500"),
"Hoehe" => array("400", "500"),
"Material" => array("Aluminium Eloxiert"),
"Farbe" => array("Schwarz", "Silber"),
"Gehaeuseverkleidung" => array("Ja", "Nein")
),
"Druckbett" => array(
"Laenge" => array("400", "500"),
"Breite" => array("400", "500"),
"Hoehe" => array("400", "500")
),
"Druckkopf" => array(
"Anzahl Druckmaterielien" => array("1", "2"),
"Filament" => array("ABS", "PLA"),
"Filamen Groesse" => array("1.7", "3.0")
),
"Schnittstelle" => array(
"USB" => array("Ja", "Nein"),
"LAN" => array("Ja", "Nein"),
"WLAN" => array("Ja", "Nein"),
"Bluetooth" => array("Ja", "Nein"),
"SD Card" => array("Ja", "Nein")
),
"Accessories" => array(
"Energieversorgung" => array("12V", "24V"),
"Zustellung" => array("Aufgebaut", "Bausatz")
)
);
Вот две ожидаемые возможные комбинации (каждая комбинация имеет одинаковое количество элементов, только конечные атрибуты меняются …). Любая помощь будет очень признательна!
[1] = array(
"Rrahmen" => array(
"Laenge" = 400,
"Breite" = 400,
"Hoehe" = 400,
"Material" = "Aluminium Eloxiert",
"Farbe" ="Silber",
"Gehaeuseverkleidung" = "Nein"),
"Druckbett" => array(
"Laenge" = "500",
"Breite" = "400",
"Hoehe" = "500"),
"Druckkopf" => array(
"Anzahl Druckmaterielien" = 1,
"Filament" = "ABS",
"Filamen Groesse" = 3.0
),
"Schnittstelle" => array(
"USB" = "Ja",
"LAN" = "Nein",
"WLAN" = "Nein",
"Bluetooth" = "Nein",
"SD Card" = "Nein",
),
"Accessories" => array(
"Energieversorgung" = "24V",
"Zustellung" = "Aufgebaut")
[2] = array(
"Rrahmen" => array(
"Laenge" = 400,
"Breite" = 500,
"Hoehe" = 400,
"Material" = "Aluminium Eloxiert",
"Farbe" ="Schwarz",
"Gehaeuseverkleidung" = "Ja"),
"Druckbett" => array(
"Laenge" = "500",
"Breite" = "500",
"Hoehe" = "500"),
"Druckkopf" => array(
"Anzahl Druckmaterielien" = 1,
"Filament" = "ABS",
"Filamen Groesse" = 3.0
),
"Schnittstelle" => array(
"USB" = "Ja",
"LAN" = "Nein",
"WLAN" = "Nein",
"Bluetooth" = "Nein",
"SD Card" = "Nein",
),
"Accessories" => array(
"Energieversorgung" = "24V",
"Zustellung" = "Aufgebaut")
Я разделил массив на отдельные массивы как таковые
$rahmen = array(
"Laenge" => array("400", "500"),
"Breite" => array("400", "500"),
"Hoehe" => array("400", "500"),
"Material" => array("Aluminium Eloxiert"),
"Farbe" => array("Schwarz", "Silber"),
"Gehaeuseverkleidung" => array("Ja", "Nein")
);
$druckbett = array(
"Laenge" => array("400", "500"),
"Breite" => array("400", "500"),
"Hoehe" => array("400", "500")
);
$druckkopf = array(
"Anzahl Druckmaterielien" => array("1", "2"),
"Filament" => array("ABS", "PLA"),
"Filamen Groesse" => array("1.7", "3.0")
);
$schnittstelle = array(
"USB" => array("Ja", "Nein"),
"LAN" => array("Ja", "Nein"),
"WLAN" => array("Ja", "Nein"),
"Bluetooth" => array("Ja", "Nein"),
"SD Card" => array("Ja", "Nein")
);
$accessories = array(
"Energieversorgung" => array("12V", "24V"),
"Zustellung" => array("Aufgebaut", "Bausatz")
);$components = array(
"Rahmen" => $rahmen,
"Druckbett" => $druckbett,
"Druckkopf" => $druckkopf,
"Schnittstelle" => $schnittstelle,
"Accessories" => $accessories);
$components = array("Rahmen", "Druckbett", "Druckkopf", "Schnittstelle", "Accessories");
и использовал следующую функцию для достижения решения:
function cartesian(array $input)
{
$result = [[]];
foreach ($input as $key => $values) {
$append = [];
foreach ($values as $value) {
foreach ($result as $data) {
$append[] = $data + [$key => $value];
}
}
$result = $append;
}
return $result;
}$print1 = cartesian($rahmen);
$print2 = cartesian($druckbett);
$print3 = cartesian($druckkopf);
$print4 = cartesian($schnittstelle);
$print5 = cartesian($accessories);
$prints = array($print1, $print2, $print3, $print4, $print5);
$print = array_combine($components, $prints);
echo "<pre>";
print_r($print);
//print_r(cartesian($print));
echo "</pre>";
Других решений пока нет …