Autor Zpráva
hugo123
Profil *
Ahojte,

pokusam sa spravit zaujimavu rekurziu, mam napriklad:

$pole[0] = array (1, 2, 3, 4);
$pole[1] = array (5);
$pole[2] = array (6, 7);
.
.
.
$pole[n] = array (...);

A teraz by som chcel vypisat take n-tice cisel, aby som spravil kazdy-s-kazdym.

Teda prve $pole[0], $pole[1] a $pole[2] by sme dostali taketo:

1 5 6
1 5 7

2 5 6
2 5 7

3 5 6
3 5 7

4 5 6
4 5 7

Chapate? Toto by sa dalo spravit 3-mi for-cyklami, ale tych poli moze byt ovela viac,
tak by to trebalo nejako rekurzivne a zatial sa mi to velmi nedari. ;-((

Viete poradit?

Dakujem velmi pekne.

Moderátor Majkl578: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
juriad
Profil
podobné téma i s řešením, jen je v javascriptu
hugo123
Profil *
juriad:
Dikes, ale ocenil by som to predovsetkym v PHP ;-)))

Nevedeli by ste mi prosim niekto pomoct?
Nox
Profil
Vždyť máš skoro doslovné řešení ... přepiš si z JS do PHP, práce max. na pár minut, zrovna u tohoto stačí skoro jen doplnit $
hugo123
Profil *
Nox:
Je tam mnoho prikazov, ktore netusim ako spravit v PHP ;-(
Mike8748
Profil
hugo123:
tak by to trebalo nejako rekurzivne a zatial sa mi to velmi nedari. ;-((
>
Viete poradit?
tak ukaž co už jsi stvořil, co přesně ti na tom nejde? když projevíš vlastní snahu tak bude možná víc lidí ochotných ti poradit

to čeho se snažíš docílit čistě v php je docela snadný úkol, asi 6 řádek kódu. ukaž svůj kód (i nefunkční), možná pak ukážu ten svůj
hugo123
Profil *
Mike8748:

no zacal som takto:

$data = array (array (1, 2, 3, 4), array (5), array (6, 7));

$trgCount = count($data);

A teraz uz netusim ako dalej. ;-((( Neporadis?
Budem ti strasne moc vdacny.
Mike8748
Profil
hugo123:
to ses moc daleko nedostal teda

jedna z možností:
function kombinace($data,$str='',$start=0)
    {
        foreach ($data[$start] as $c)
        {
            $out=$str.$c;
            if (strlen($out)==count($data)) { echo $out."\n";}                
            if ($start<(count($data)-1)) { kombinace($data,$out,($start+1)); }
        }
    }

$data = array (array (1, 2, 3, 4), array (5), array (6, 7));

kombinace($data);  // vypíše kombinace pole $data, každou na jednu řádku

edit: opravena chyba v nazvu funkce
hugo123
Profil *
Mike8748:
Dekuji moc ;-)))))

Funkciu dump() mi neche zobrat, viem to niecim nahradit?

Dakujem.
Mike8748
Profil
dump nahrad za kombinace() ... ta fce je rekurzivni, ma volat sama sebe
hugo123
Profil *
Mike8748:
Je tu este problem, co je tam bude 2 ciferne cislo?

potom to spravne nefunguje ;-(((

Napr. ked ma vypisat 3-10-5 tak vypise len 3 cifry.

Da sa to?

Dakujem.
Mike8748
Profil
hugo123:
da se cokoliv

"problem" je podminka v kodu, na radce 6 podle #8... ta povoli vypis pouze pokud delka textu k vypsani odpovida poctu poli v $data
podminku muzes dat pryc, pak to ale bude vypisovat i kratsi varianty (ne ze vsech prvku)
hugo123
Profil *
Mike8748:
Ale kratsie nechcem, ide o to, ze chcem aby vzdy vypisalo 3 cisla, a kazde bolo z ineho pola.

Vies o co mi ide?

Da sa to rychlo opravit?

Vopred velka vdaka.
juriad
Profil
a zkusil jsi alespoň pochopit, jak to funguje?

šestý, sedmý řádek Mike8748ova kódu:
if($start==count($data)-1) {
  echo $str."\n";  
} else {
  kombinace($data, $out, $start+1);
}
hugo123
Profil *
juriad:
ano, je to v skutocnosti easy, hanbim sa ze som na to neprisiel sam.
Uz som si to spravil a tie cisla si hadzem do pola, ktore si predavam cez funkciu.

Dakujem vsetkym za pomoc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: