Kombinace vícerozměrného pole

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Zuben45
Člen | 268
+
0
-

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
+
+1
-

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
+
0
-

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
+
+1
-

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
+
0
-

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
+
+1
-

Nechybi tam v prikladu jeste

x => [
   2 => value2,
   3 => value3,
     ],

?

Editoval emptywall (7. 10. 2016 12:54)

Zuben45
Člen | 268
+
0
-

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
+
+1
-

@Zuben45 V prvním příkladu máš

<?php
 5 => [
    1 => value1,
    3 => value2,
      ],
?>

úmyslně?

Zuben45
Člen | 268
+
0
-

Fafin napsal(a):

@Zuben45 V prvním příkladu máš

<?php
 5 => [
    1 => value1,
    3 => value2,
      ],
?>

úmyslně?

nene, nedopatřením, díky za upozornění, upraveno.

Michal Hlávka
Člen | 190
+
+1
-

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
+
+1
-

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)