Kombinace vícerozměrného pole
- Zuben45
- Člen | 268
zdravím, potřeboval bych trochu pomoct, potřebuji udělat kombinaci vícerozměrového pole, mám-li například:
$array = [
0 => [
1 => value1,
2 => value2,
],
1 => [
3 => value3,
4 => value4,
],
2 => [
5 => value5,
],
];
tak potřebuji dostat
$result = [
0 => [1 => value1],
1 => [2 => value2],
2 => [3 => value3],
3 => [4 => value4],
4 => [5 => value5],
5 => [
1 => value1,
3 => value3,
],
6 => [
1 => value1,
4 => value4,
],
7 => [
1 => value1,
5 => value5,
],
8 => [
2 => value2,
3 => value3,
],
9 => [
2 => value2,
4 => value4,
],
10 => [
2 => value2,
5 => value5,
],
11 => [
1 => value1,
3 => value3,
5 => value5,
],
12 => [
1 => value1,
4 => value4,
5 => value5,
],
13 => [
2 => value2,
3 => value3,
5 => value5,
],
14 => [
2 => value2,
4 => value4,
5 => value5,
],
]
netuší někdo jak by to šlo ? $array může být i větší, či menší s různými počty.
Děkuji
Editoval Zuben45 (7. 10. 2016 13:39)
- Jan Mikeš
- Člen | 771
Pravděpodobně přes http://php.net/…ecursive.php nebo http://php.net/…ray-walk.php
Editoval Lexi (7. 10. 2016 11:34)
- Zuben45
- Člen | 268
Lexi napsal(a):
Pravděpodobně přes http://php.net/…ecursive.php nebo http://php.net/…ray-walk.php
děkuji, ale nedochází mi to jak to využít, mohl bys mi to prosím trochu nastínit ? Děkuji
- Jan Mikeš
- Člen | 771
Zkus prosím ještě podrobněji popsat co přesně a za jakých podmínek se má stát, z ukázky mi to není úplně jasné. Chceš aby prvky na 2. úrovni pole, pokud je splněna podmínka, že value není pole, tak aby se hodnota obalila do pole? Možná by pomohlo, kdybys nastínil, čeho se snažíš dosáhnout.
- Zuben45
- Člen | 268
snažím se dosáhnout kombinaci každého prvku s každým, ale v závislosti na skupině a přitom nemusí obsahovat všechny skupiny. Jedná se spíš o kombinaci indexů, než hodnot.
když trochu upravím původní pole:
$array = [
'skupina1' => [
1 => value1,
2 => value2,
],
'skupina2' => [
3 => value3,
4 => value4,
],
'skupina3' => [
5 => value5,
],
];
a kombinace pro value1 by měla být:
[
0 => [1 => value1],
1 => [1 => value1, 3 => value3],
2 => [1 => value1, 4 => value4],
3 => [1 => value1, 5 => value5],
4 => [1 => value1, 3 => value3, 5 => value5],
5 => [1 => value1, 4 => value4, 5 => value5]
]
pracuji na filtrech, ve kterých je začleněn i konfigurátor (například výměna disku, v základu má 250GB HDD, ale má konfigurační položky pro tento například 128GB SSD, 256GB SSD, …)
Zkusím to vysvětlit ještě trochu jinak, měla by se vytvořit kombinace, která může i nemusí obsahovat jinou skupinu, a pokud by měla jinou skupinu, tak může být přidána pouze jedna skupina z každé skupiny.
Editoval Zuben45 (7. 10. 2016 12:11)
- Michal Hlávka
- Člen | 190
Nechybi tam v prikladu jeste
x => [
2 => value2,
3 => value3,
],
?
Editoval emptywall (7. 10. 2016 12:54)
- Zuben45
- Člen | 268
emptywall napsal(a):
Nechybi tam v prikladu jeste
x => [ 2 => value2, 3 => value3, ],
?
v jakém myslíš ? v původním příspěvku tam je:
8 => [
2 => value2,
3 => value3,
]
a v posledním je příklad pouze pro value1
($array[‚skupina1‘][1]).
Hodnoty v dané skupině nesmějí být spolu v poli, takže,
například takto to nesmí vypadat:
[
0 => [
1 => value1,
2 => value2
]
]
Editoval Zuben45 (7. 10. 2016 13:02)
- Svaťa Šimara
- Člen | 98
@Zuben45 V prvním příkladu máš
<?php
5 => [
1 => value1,
3 => value2,
],
?>
úmyslně?
- Michal Hlávka
- Člen | 190
Zuben45 napsal(a):
emptywall napsal(a):
Nechybi tam v prikladu jeste
x => [ 2 => value2, 3 => value3, ],
?
v jakém myslíš ? v původním příspěvku tam je:
8 => [ 2 => value2, 3 => value3, ]
a v posledním je příklad pouze pro value1 ($array[‚skupina1‘][1]).
Hodnoty v dané skupině nesmějí být spolu v poli, takže, například takto to nesmí vypadat:[ 0 => [ 1 => value1, 2 => value2 ] ]
promin to jsem nemyslel, jsem se prepsal. ted uz stejne nemuzu najit to co jsem myslel. jinak to co chces se jmenuje https://en.wikipedia.org/…sian_product a na stackowerflow najdes dost prikladu. :-)
- Zuben45
- Člen | 268
emptywall napsal(a):
promin to jsem nemyslel, jsem se prepsal. ted uz stejne nemuzu najit to co jsem myslel. jinak to co chces se jmenuje https://en.wikipedia.org/…sian_product a na stackowerflow najdes dost prikladu. :-)
našel jsem http://stackoverflow.com/…rrays-in-php , mockrát všem děkuji za pomoc, už vše valí jak má :)
ještě sem dodám funkční kód k mému příkladu ;)
$result2 = array(array());
foreach ($array as $arr)
{
array_push($arr,null);
$new_result = array();
foreach ($result2 as $old_element) {
foreach ($arr as $el) {
$new_result []= array_merge($old_element,array($el));
}
}
$result2 = $new_result;
}
foreach ($result2 as $in => $datas) {
foreach ($datas as $d => $v) {
if ($v === null) {
unset($result2[$in][$d]);
}
}
if (empty($result2[$in])) {
unset($result2[$in]);
}
}
sort($result2);
Editoval Zuben45 (7. 10. 2016 17:50)