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

Langage PHP Discussion :

Script de fonction récursive


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Par défaut Script de fonction récursive
    Bonjour,

    Je vous sollicite pour la mise en place d'une fonction récursive.

    Je n'arrive pas à la mettre en place.

    J'ai un tableau qui liste les tables d'une base de données, et des sous-tableaux associés qui contiennent qui contiennent la clé étrangère de la table parente :

    Exemple :

    ARRAY([TABLE1] => ARRAY([0] => TABLE3 [1] => TABLE4) [TABLE3] => ARRAY([0] => TABLE2 [1] => TABLE5)) ...

    Le but de ma fonction récursive est de trouver le meilleur chemin pour arrive d'une table X à une table Z.

    La finalité : pouvoir constituer automatiquement les jointures entre table pour mettre en place une requête dynamique.

    Voici la fonction mise en place :

    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
     
    print_r(test($tables,"SLE_L1"));
     
    	FUNCTION test($tables,$element){	
    		$return = ARRAY();
    		IF($element == "MAIS_STOCK_S1"){
    			RETURN $return;
    		}
    		ELSE{
    			IF(ISSET($tables[$element])){
    				FOREACH($tables[$element] AS $enfant){
    					//ECHO $element."   ////       ";
    					//print_r($enfant);  ECHO "</br>";
    					$return[$element][] = $enfant;
    					$return = ARRAY_MERGE(test($tables,$enfant),$return);
    				}
    			}
    				RETURN $return;
    		}
     
    	}
    Cette fonction me retourne bien des données mais cela ne correspond pas à mon chemin optimal.

    Je demande votre aide donc, si vous avez besoin d'information complémentaire n'hésitez pas !

    Cordialement

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    par le meilleur chemin tu entends le chemin qui générera le moins de cardinalités ? A priori c'est pas possible sans parcourir/connaître le contenu/nombre des enregistrements de chaque table.
    En fait, je pense que tu veux juste pouvoir virer les doublons dans ton tableau et générer les liaisons entre les tables ?
    Dans ce cas est-ce que tu es réellement sur un nombre de niveaux inconnu dans ton arbre ? Selon ton exemple la récursivité est inutile, t'aurais un exemple concret de tableau ?
    A+

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 101
    Par défaut
    Bonsoir,

    si j'ai bien compris, les relations entre tes tables forment un graphe. Et tu cherches à trouver le plus court chemin entre deux points de ce graphe. C'est un problème connu, et le meilleur algorithme pour le résoudre est celui de Dijkstra. Une petite recherche avec les mots « PHP Dijkstra » donne des résultats intéressants. Je te laisse chercher
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre éclairé Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Par défaut
    Bonjour,

    Watilin, mon problème se résume exactement à la phrase que vous avez énoncé.

    Je vais donc me documenter sur l'algorithme Dijkstra, je laisse le sujet ouvert le temps de mes recherches et si j'ai des questions.

    Cordialement

    Merci encore !

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. fonction récursive: erreur
    Par calla29 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/05/2006, 11h51
  2. [VB6] XML, fonction récursive de recherche
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2006, 21h27
  3. [XSLT] fonction récursive à N niveaux
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/03/2006, 12h30
  4. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  5. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12

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