IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

les fonctions récursives et les array


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut les fonctions récursives et les array
    Bonjour,
    j'ai un problème que je comprends pas trop et j'ai jamais vraiment comprit.
    C'est les fonctions récursives, visuellement mon array est remplie, mais la fonction qui le lance ne la pas ou pas en entier.

    Voici la base de données qui sert a faire les jointures:
    Nom : Capturephp.PNG
Affichages : 190
Taille : 60,3 Ko

    Mon but c'est récupérer des nombres en bdd jusqu'à ce qu'il y en est plus.

    Par exemple le nombre 9 est lié au nombre 4, le nombre 4 est lié au 1 et ainsi de suite et moi il me faut la liste sauf qu'un nombre peut en avoir plusieurs et il faut tout récupérer, le 9 est aussi lié au 6 par exemple. C'est un peut comme une arborescence de fichier/dossier en quelque sorte

    J'ai vraiment du mal a comprendre comment on fait avec la récursivité quand il faut remplir un array, le résultat obtenu est souvent déroutant. Quand je boucle et que je log je vois mon array remplie, mais a l’endroit ou il y la fonction de lancer on voit qu’il y a que le premier niveau de l’array

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    	function recipe_sql($recipe_id, $bdd)
    	{
    		$requete_sql = 'SELECT * FROM `recipe_group_link`
    		LEFT JOIN recipes ON recipes.recipe_id = recipe_group_link.recipe_id
    		LEFT JOIN recipes AS re1 ON re1.recipe_id = recipe_group_link.recipe_group_id
    		WHERE recipes.recipe_id = :recipe_id';
    		$stmt = $bdd->prepare($requete_sql);
    		$stmt->execute(array(
    			'recipe_id' => $recipe_id,
    		));
    		$stmt->setFetchMode(PDO::FETCH_ASSOC);
    		$recipes =  $stmt->fetchAll();
    		errorInfoSQL($stmt);
    		return $recipes;
    	}
     
    	function recipes_recursive($recipe_id, $bdd, $array)
    	{
    		$recipe_sql = recipe_sql($recipe_id, $bdd);
    		// krumo($recipe_sql);
     
    		foreach($recipe_sql as $key => $value)
    		{
    			// krumo($value);
    			echo '[ '.$value['recipe_id'].' '.$value['recipe_name'].' ] ';
    			$array[] = $value;
    			// krumo($array);
    			recipes_recursive($value['recipe_id'], $bdd, $array);
    			echo '<br>';
    		}
    		return $array;
    	}
    Visuellement la fonction fait le taff, mais pas avec le tableau. Pour le moment j'ajoute tout ce que la bdd donne avec la jointure, mais il faudrait que si je comprends comment faire que j'utilise que les nombre

    Merci pour votre aide, car la je bloque

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    La structure ne me paraît pas claire
    Que cherches-tu à représenter ?
    Qui est parent ? Qui est enfant ? Y-a-t-il seulement ce genre de relation ?
    Tu veux représenter quel genre de graphe ? As-tu une idée de sa représentation ?

    Pour le moment je vois ceci :

    Nom : f443.png
Affichages : 155
Taille : 12,7 Ko

    C'est un peut comme une arborescence de fichier/dossier
    Un dossier a 0,n fichiers et 0,n dossiers (enfants)
    Un fichier a 1 unique dossier (parent)
    C'est beaucoup plus simple et ne correspond en rien à ce que tu nous montres

  3. #3
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Je cherche a lier les nombres entre eux, c'est des recettes qui ont besoin d'une autre recette et ainsi de suite, comme je disais le 9 a besoin du 6 et du 4, le 6 a besoin du 10 qui lui a besoin du 1, c'est pour ça que je disais que c'est un peut comme une arborescence de fichier d'une certaine manière.

    J'ai fait a la main un array pour avoir une idée comment je pourrais le faire, mais c'est peut être pas la meilleur façon(c'est le même exemple afficher d'une autre manière):
    Nom : Capturephp.PNG
Affichages : 157
Taille : 184,0 Ko

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    si tu étais lycéen en août 2012, je te souhaites avoir quitté ce statut 11 ans après

    Séb. est d'un bon conseil.

    Pour décrire la table, j'utiliserais sa DDL ; ça serait plus clair.
    Peut-être te tourner vers le forum https://www.developpez.net/forums/f6...sation/schema/

  5. #5
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    J'avais pas vu pour le statut lycée^^.


    J'ai réussi a obtenir quelque chose avec ces codes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    	function recipes_recursive($recipe_id, $bdd, $array, $key_)
    	{
    		$recipe_sql = recipe_sql($recipe_id, $bdd);
     
    		if(empty($array2))
    			{
    				$array2 = array();
    			}
    		else
    			{
    			}
    		foreach($recipe_sql as $key => $value)
    		{
    			// krumo($value);
    			// echo '[ '.$value['recipe_id'].' '.$value['recipe_name'].' ] ';
    			if($key == count($recipe_sql)-1)
    				{
    					$array2[ $key_."_".$value['recipe_id'] ] =  $key_.'_'.$value['recipe_id']." > ".$key." ".count($recipe_sql);
    				}
    			else
    				{
    				}
    			$array2[$key_."_".$value['recipe_id'] ] = recipes_recursive($value['recipe_id'], $bdd, $array, $key_."_".$value['recipe_id']);
    		}
    		$r =  array_merge($array2, $array);
    		return $r;
    	}
     
    	function boucle_recursive($array)
    	{		
    		foreach($array as $key => $value)
    		{
    			if(count($value) > 0)
    				{
    					boucle_recursive($value);
    				}
    			else
    				{
    					echo "=> ".$key.'<br>';
    				}
    		}
    	}
    mais c'est pas top, car ça me donne un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    array(2) {
        [19_9] = array(2) {
            [19_9_4] = array(1) {
                [19_9_4_1] = array(0) {
                }
            }
            [19_9_6] = array(1) {
                [19_9_6_10] = array(1) {
                    [19_9_6_10_1] = array(0) {
                    }
                }
            }
        }
        [19_10] = array(1) {
            [19_10_1] = array(0) {
            }
        }
    }
    et j'ai réussi a garder que ça:
    => 19_9_4_1
    => 19_9_6_10_1
    => 19_10_1

    et après il faut que je traites les nombres pour les utiliser.... mais j'ai pas réussi a faire mieux

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Pour décrire la table, j'utiliserais sa DDL ; ça serait plus clair.
    Comme vu ta copie d'écran, tu utilises PhpMyAdmin, fais un export et donne la DDL de la table
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE `recipe_group_link` (`recipe_group_link_id` int NOT NULL AUTO_INCREMENT,
    etc

  7. #7
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    DDL c'est quoi ?

    Ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    CREATE TABLE `recipe_group_link` (
      `recipe_group_link_id` int NOT NULL,
      `recipe_id` int NOT NULL,
      `recipe_group_id` int NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
     
    --
    -- Déchargement des données de la table `recipe_group_link`
    --
     
    INSERT INTO `recipe_group_link` (`recipe_group_link_id`, `recipe_id`, `recipe_group_id`) VALUES
    (1, 4, 1),
    (2, 9, 4),
    (3, 9, 6),
    (4, 11, 12),
    (5, 13, 12),
    (6, 10, 1),
    (7, 8, 11),
    (8, 5, 1),
    (9, 5, 18),
    (10, 6, 10),
    (11, 7, 1),
    (12, 19, 9),
    (13, 19, 10);

Discussions similaires

  1. Les Fonctions récursives
    Par RondoudouBooleen dans le forum Fortran
    Réponses: 2
    Dernier message: 27/03/2012, 21h07
  2. fonction récursive pour générer les nbrs sur n bits
    Par simpatico dans le forum Débuter
    Réponses: 6
    Dernier message: 18/11/2011, 09h06
  3. [PHP 5.3] Fonction récursive : où placer les div ?
    Par renaud26 dans le forum Langage
    Réponses: 3
    Dernier message: 21/06/2011, 08h30
  4. Fonction récursive pour remplissage Array
    Par WibiMaster dans le forum Langage
    Réponses: 15
    Dernier message: 14/02/2011, 08h41
  5. fonction trim sur les array de array
    Par billyrose dans le forum Langage
    Réponses: 2
    Dernier message: 14/07/2009, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo