Autor | Zpráva | ||
---|---|---|---|
ccomb Profil * |
#1 · Zasláno: 30. 4. 2011, 10:13:38
co potrebuji:
mam array(pes, kocka, kun) druhe array (evropa, amerika) treti array (prvni, druha) a potreboval bych vsechny kombinace (nebo jak se tomu spravne rika) pes - evropa -prvni pes -evropa - druha pes - amerika - prvni pes -amerika - druha kocka -evropa - prvni atd prvku v polich muze byt ruzny pocet stejne tak poli. nevidel nekdo neco podobneho hotoveho nebo nevi jak zacit? |
||
ShiraNai7 Profil |
#2 · Zasláno: 30. 4. 2011, 10:49:59 · Upravil/a: ShiraNai7
Tak jsem to sepsal.. kod:
// testovaci pole $pole = array( array('pes', 'kocka', 'godzilla'), array('evropa', 'tramtarie'), array('prvni', 'druha'), ); // funkce function kombinace($arrays, $index = 0) { // priprava statickych promennych static $a, $l, $p, $o; if($index === 0) { $a = $arrays; $l = sizeof($arrays) - 1; $p = array(); } // rekurzivni kombinovani for($i = 0; isset($a[$index][$i]); ++$i) { $p[] = $a[$index][$i]; if($index !== $l) kombinace(null, $index + 1); else $o[] = $p; array_pop($p); } // navraceni vysledku (a vynulovani pouzitych stat. prom.) if($index === 0) { $a = $l = $p = null; $otmp = $o; $o = null; return $otmp; } } // zavolame funkci print_r(kombinace($pole)); A výsledek volání výše je: Array ( [0] => Array ( [0] => pes [1] => evropa [2] => prvni ) [1] => Array ( [0] => pes [1] => evropa [2] => druha ) [2] => Array ( [0] => pes [1] => tramtarie [2] => prvni ) [3] => Array ( [0] => pes [1] => tramtarie [2] => druha ) [4] => Array ( [0] => kocka [1] => evropa [2] => prvni ) [5] => Array ( [0] => kocka [1] => evropa [2] => druha ) [6] => Array ( [0] => kocka [1] => tramtarie [2] => prvni ) [7] => Array ( [0] => kocka [1] => tramtarie [2] => druha ) [8] => Array ( [0] => godzilla [1] => evropa [2] => prvni ) [9] => Array ( [0] => godzilla [1] => evropa [2] => druha ) [10] => Array ( [0] => godzilla [1] => tramtarie [2] => prvni ) [11] => Array ( [0] => godzilla [1] => tramtarie [2] => druha ) ) Mělo by to být ok — 3*2*2 je 12 a funkce skutečně vrátí pole s 12ti kombinacemi. |
||
Keeehi Profil |
#3 · Zasláno: 30. 4. 2011, 13:52:41
$podminka = true; $a = $b = $c = 0; $vystup = array(); $pole = array( array('pes', 'kocka', 'godzilla'), array('evropa', 'tramtarie'), array('prvni', 'druha'), ); while($podminka){ $vystup[] = array($pole[0][$a], $pole[1][$b], $pole[2][$c]); $c++; if($c == count($pole[2])){ $c = 0; $b++; } if($b == count($pole[1])){ $b = 0; $a++; } if($a == count($pole[0])){ $podminka = false; } } print_r($vystup); |
||
ShiraNai7 Profil |
#4 · Zasláno: 30. 4. 2011, 14:34:47
Keeehi:
Akorát tam máš natvrdo naprogramovány procedury jen pro 3 pole. Má funkce je obecná, vezme libovolný počet polí s libovolným počtem řetězců v nich. |
||
Keeehi Profil |
#5 · Zasláno: 30. 4. 2011, 14:36:56 · Upravil/a: Keeehi
ShiraNai7:
no tak já to tedy přepracuji :) EDIT: a nebo ne, je to zbytečné. |
||
ShiraNai7 Profil |
#6 · Zasláno: 30. 4. 2011, 16:09:07
Keeehi:
„EDIT: a nebo ne, je to zbytečné.“ Je, když už jsem přesně takovou napsal :) |
||
Časová prodleva: 13 let
|
0