Bonjour ,

ça fait 8h que j'essaie de faire une fonction récursive en php qui va ajouter des liens dynamiquement à un tableau multidimentionnel , voici mon tableau :

Array
(
    [1] => stdClass Object
        (
            [page_id] => 1
            [titre] => Présentation de l'Hotel
            [description] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis efficitur elit.Lorem ipsum dolor sit amet, consectetur adi piscing elit. Vivamus quis efficiturelit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ipsum dolor sit amet, consectetur adipis
            [url] => presentation-de-l-hotel
            [parent_id] => 0
        )

    [2] => stdClass Object
        (
            [page_id] => 2
            [titre] => About us
            [description] => About us
            [url] => about-us
            [parent_id] => 0
        )

    [3] => stdClass Object
        (
            [page_id] => 3
            [titre] => contact
            [description] => contact
            [url] => contact
            [parent_id] => 0
        )

    [4] => stdClass Object
        (
            [page_id] => 4
            [titre] => Packages
            [description] => Packages
            [url] => packages
            [parent_id] => 0
            [children] => Array
                (
                    [0] => stdClass Object
                        (
                            [page_id] => 5
                            [titre] => Villa
                            [description] => Villa
                            [url] => villa
                            [parent_id] => 4
                            [children] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [page_id] => 6
                                            [titre] => villa 2 chambres
                                            [description] => villa 2 chambres
                                            [url] => villa-2-chambres
                                            [parent_id] => 5
                                        )

                                    [1] => stdClass Object
                                        (
                                            [page_id] => 7
                                            [titre] => villa 3 chambres
                                            [description] => villa 3 chambres
                                            [url] => villa-3-chambres
                                            [parent_id] => 5
                                        )

                                )

                        )

                    [1] => stdClass Object
                        (
                            [page_id] => 9
                            [titre] => package golf
                            [description] => package golf
                            [url] => package-golf
                            [parent_id] => 4
                        )

                )

        )

    [8] => stdClass Object
        (
            [page_id] => 8
            [titre] => galerie
            [description] => galerie
            [url] => galerie
            [parent_id] => 0
        )

)

et voilà ce que j'aimerai avoir :

Array
(
    [1] => stdClass Object
        (
            [page_id] => 1
            [titre] => Présentation de l'Hotel
            [description] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis efficitur elit.Lorem ipsum dolor sit amet, consectetur adi piscing elit. Vivamus quis efficiturelit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ipsum dolor sit amet, consectetur adipis
            [url] => presentation-de-l-hotel
            [urlrec] => presentation-de-l-hotel.html
            [parent_id] => 0
        )

    [2] => stdClass Object
        (
            [page_id] => 2
            [titre] => About us
            [description] => About us
            [url] => about-us
            [urlrec] => about-us.html
            [parent_id] => 0
        )

    [3] => stdClass Object
        (
            [page_id] => 3
            [titre] => contact
            [description] => contact
            [url] => contact
            [urlrec] => contact.html
            [parent_id] => 0
        )

    [4] => stdClass Object
        (
            [page_id] => 4
            [titre] => Packages
            [description] => Packages
            [url] => packages
            [urlrec] => packages/
            [parent_id] => 0
            [children] => Array
                (
                    [0] => stdClass Object
                        (
                            [page_id] => 5
                            [titre] => Villa
                            [description] => Villa
                            [url] => villa
                            [urlrec] => packages/villa/
                            [parent_id] => 4
                            [children] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [page_id] => 6
                                            [titre] => villa 2 chambres
                                            [description] => villa 2 chambres
                                            [url] => villa-2-chambres
                                            [urlrec] => packages/villa/villa-2-chambres.html
                                            [parent_id] => 5
                                        )

                                    [1] => stdClass Object
                                        (
                                            [page_id] => 7
                                            [titre] => villa 3 chambres
                                            [description] => villa 3 chambres
                                            [url] => villa-3-chambres
                                            [urlrec] => packages/villa/villa-3-chambres.html
                                            [parent_id] => 5
                                        )

                                )

                        )

                    [1] => stdClass Object
                        (
                            [page_id] => 9
                            [titre] => package golf
                            [description] => package golf
                            [url] => package-golf
                            [urlrec] => packages/package-golf.html
                            [parent_id] => 4
                        )

                )

        )

    [8] => stdClass Object
        (
            [page_id] => 8
            [titre] => galerie
            [description] => galerie
            [url] => galerie
            [urlrec] => galerie.html
            [parent_id] => 0
        )

)

Merci pour votre aide , et si vous avez une autre fonction pour l'afficher ça me ferai plaisir, Merci infiniment .

6 réponses


skp
Réponse acceptée

Effectivement je n'ai pas bien regardé le résultat que tu désirais. Je te passe ce code que je n'ai pas testé et pas commenté, mais comme tu as passé 8h :) à tenter d'obtenir ton résultat ça pourra peut-être t'aider.

function maFonction($items, $itemParent = null)
{
    foreach($items as $item)
    {
        $item->urlrec = "";
        if(isset($itemParent->urlrec))
        {
            $item->urlrec = $itemParent->urlrec;
        }

        $item->urlrec = $item->urlrec . $item->url;

        if(!empty($item->children))
        {
            $item->urlrec = $item->urlrec . "/";
            $item->children = maFonction($item->children, $item);
        }
        else
        {
            $item->urlrec = $item->urlrec . ".html";
        }
    }
    return $items;
}

Bonjour, tu peux utiliser la fonction "array_walk_recursive()" avec un callback.
Par exemple :

$callback = function($item, $key)
{
    $item->urlrec = $item->url . ".html";
};
array_walk_recursive($monTableau, $callback);

Je ne vais pas te donner le code ça serais trop facile ^^.
Je pense qu'un ou plusieurs foreach ferais l'affaire à toi de creuser :p

maknaoui
Auteur

Merci skp pour votre réponse mais la fonction array_walk_recursive et très limiter , on peut pas avoir l'url du parent cette fonction , j'ai déjà essayé, En tous cas merci.

maknaoui
Auteur

Uneo7 : J'ai déjà fait des foreach et j'ai arriver à trouver mon résultat, mais je veux une fonction récursive, j'ai même essayer de conclure une fonction récursive depuis tous les foreach mais toujours je trouve des défauts , Merci pour votre aide si vous en avez un car j'ai déjà creusé sans but.

maknaoui
Auteur

Je vous remercie Skp ça marche du premier coup, :D :D :D