Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Oprava PHP kódu

Ahoj všichni, potřeboval bych poradit s tímto kódem který projde pole $array a vytiskne přes echo objekt title u všech rodičů. To echo funguje správně ale proměnná $vysledek obsahuje pouze poslední vložený údaj :( Nevídí prosím někdo chybu? Děkuji

function getk($array,$cid)
{
        $parent = [];

        foreach($array as $obj)
        {
                if($obj->cid === $cid)
                {
                        $parent[] = $obj->title;
 
                        echo $obj->title;
 
                        if($obj->pid > 0)
                        {
                                getk($array,$obj->pid);
                        }
                }
        }
 
        return $parent;
}
 
$vysledek = getk($array,10);

Řešení:

V PHP nedělám, ale zkusil bych něco takového:

function getk($array,$cid)
{
        $parent = [];

        foreach($array as $obj)
        {
                if($obj->cid === $cid)
                {
                        $parent[] = $obj->title;
 
                        echo $obj->title;
 
                        if($obj->pid > 0)
                        {
                                array_push($parent, ...getk($array,$obj->pid));
                        }
                }
        }
 
        return $parent;
}
 
$vysledek = getk($array,10);
Předmět Autor Datum
Zahazuješ výsledek rekurzivního volání.
Wikan 01.07.2020 21:35
Wikan
Můžeš mi poradit jak to opravit?
iKUBa 01.07.2020 21:36
iKUBa
Nezahazovat ho, ale přidat do výsledku.
Wikan 01.07.2020 21:37
Wikan
Napadá mě snad jen takto, ale to stejně nejde. function getk($array,$cid,$parent) { foreach($array…
iKUBa 01.07.2020 21:41
iKUBa
V PHP nedělám, ale zkusil bych něco takového: function getk($array,$cid) { $parent = []; foreach($a…
Wikan 01.07.2020 21:44
Wikan
Je tohle ekvivalent $parent[] = getk($array,$obj->pid); tohodle? array_push($parent, ...getk($arr…
iKUBa 01.07.2020 21:59
iKUBa
Bez těch teček to vloží celé pole jako jeden prvek. S nimi to tam vloží jednotlivé prvky.
Wikan 01.07.2020 22:06
Wikan
No tak to je masakr, ale funguje to! Díky tobě. poslední
iKUBa 01.07.2020 22:19
iKUBa

Napadá mě snad jen takto, ale to stejně nejde.

function getk($array,$cid,$parent)
{
        foreach($array as $obj)
        {
                if($obj->cid === $cid)
                {
                        $parent[] = $obj->title;
 
                        echo $obj->title;
 
                        if($obj->pid > 0)
                        {
                                getk($array,$obj->pid,$parent);
                        }
                }
        }
 
        return $parent;
}
 
$vysledek = getk($array,10,$parent=[]);

V PHP nedělám, ale zkusil bych něco takového:

function getk($array,$cid)
{
        $parent = [];

        foreach($array as $obj)
        {
                if($obj->cid === $cid)
                {
                        $parent[] = $obj->title;
 
                        echo $obj->title;
 
                        if($obj->pid > 0)
                        {
                                array_push($parent, ...getk($array,$obj->pid));
                        }
                }
        }
 
        return $parent;
}
 
$vysledek = getk($array,10);

Zpět do poradny Odpovědět na původní otázku Nahoru