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

  1. #21
    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
    Toufik83 : j'ai l'impression que c'est ça mais certains nombre ont pas l'air bon.
    j'ai changé pour le moment la conception de l'array pour me simplifier la vie pour le moment, j'ai donc version(un peut celle que tu ma donnée Toufik83) et une avec un simple array, car je sais pas laquelle est la meilleur, je test donc les deux.

    laurentSc: j'ai fait pas mal de langage différend, mais je maitrise pas tout, mais la aussi je suis largué, jai jamais fait ce type de requette sql. j'ai jamais comprit en plus les fonctions récursives

    Dernière question: quand je boucle sur mon array, si je change une valeur, j'ai l'impression que t'en que je boucle dessus je peux pas voir la valeur modifié, ça vient de moi ou c'est normal ? J'ai pensé a utilisé un autre array temporaire, mais c'est moins pratique

  2. #22
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Citation Envoyé par Lprofessionnelle Voir le message
    Toufik83 : j'ai l'impression que c'est ça mais certains nombre ont pas l'air bon.
    Oui en faite, je viens de remarquer que le 19 par exemple est lié à 9 et 10, et le 9 est lié à 6, le 6 est lié à 10, le 10 est lié à 1.

    Donc si tu veux arriver jusqu'au 1, il va falloir rajouter une autre jointure dans la requête et modifier légèrement la fonction get :
    Code php : 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
    function get($dt){
    	global $pdo;
    	$data1=[];
    	$recipGroupIds=array_filter(explode(',',$dt['recipe_group_id']));
    	foreach($recipGroupIds as $index=>$grpId){
    		$ex=array_filter(explode(',',$dt["re1_recipe_id"]));
    		$data1[$grpId]=[];
    		foreach($ex as $index1=>$recipId){
    			$ex1=array_filter(explode(',',$dt["re2_recipe_group_id"]));
    			$data1[$grpId][$recipId]=[];
    			foreach($ex1 as $index2=>$recipGrpId){
    				$ex2=array_filter(explode(',',$dt['re3_recipe_id']));
    				$data1[$grpId][$recipId][$recipGrpId]=$ex2;
    			}
    		}
    	}
    	return $data1;
    }

    Puis on peut simplifier la requête sans utiliser group_concat :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT distinct r.recipe_id
    ,r.recipe_group_id as recipe_group_id
    ,r1.recipe_group_id as re1_recipe_id
    ,r2.recipe_group_id as re2_recipe_group_id
    ,r3.recipe_group_id as re3_recipe_id
    FROM recipe_group_link r
    LEFT JOIN recipe_group_link r1 ON r1.recipe_id = r.recipe_group_id
    left join recipe_group_link r2 on r2.recipe_id = r1.recipe_group_id
    left join recipe_group_link r3 on r3.recipe_id = r2.recipe_group_id
    group by r.recipe_id,r.recipe_group_id

    Résultat :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    Array
    (
        [4] => Array
            (
                [1] => Array
                    (
                    )
     
            )
     
        [5] => Array
            (
                [1] => Array
                    (
                    )
     
                [18] => Array
                    (
                    )
     
            )
     
        [6] => Array
            (
                [10] => Array
                    (
                        [1] => Array
                            (
                            )
     
                    )
     
            )
     
        [7] => Array
            (
                [1] => Array
                    (
                    )
     
            )
     
        [8] => Array
            (
                [11] => Array
                    (
                        [12] => Array
                            (
                            )
     
                    )
     
            )
     
        [9] => Array
            (
                [4] => Array
                    (
                        [1] => Array
                            (
                            )
     
                    )
     
                [6] => Array
                    (
                        [10] => Array
                            (
                                [1] => Array
                                    (
                                    )
     
                            )
     
                    )
     
            )
     
        [10] => Array
            (
                [1] => Array
                    (
                    )
     
            )
     
        [11] => Array
            (
                [12] => Array
                    (
                    )
     
            )
     
        [13] => Array
            (
                [12] => Array
                    (
                    )
     
            )
     
        [19] => Array
            (
                [9] => Array
                    (
                        [6] => Array
                            (
                                [10] => Array
                                    (
                                        [0] => 1
                                    )
     
                            )
     
                    )
     
                [10] => Array
                    (
                        [1] => Array
                            (
                            )
     
                    )
     
            )
     
    )
    Citation Envoyé par Lprofessionnelle Voir le message
    Dernière question: quand je boucle sur mon array, si je change une valeur, j'ai l'impression que t'en que je boucle dessus je peux pas voir la valeur modifié, ça vient de moi ou c'est normal ? J'ai pensé a utilisé un autre array temporaire, mais c'est moins pratique
    Si vous parcourez le tableau avec une boucle array_map ou array_walk_recursive ou autre fonction sophistiquée, il va falloir passer la variable par référence &$LaVariable à la fonction, en le précédant par un and commercial, sinon aucune modification ne sera effectuée.

  3. #23
    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 le message, donc il faut des jointures supplémentaire suivant le nombre de liaisons entre les nombres que j'ai ?

    Je boucle avec un simple foreach() et je voulais modifier l'array en court de route pour modifier l'élément "suivant", ainsi sur l'élément suivant je pouvais utiliser la valeur calculé sur l'élément précédent et ça ne prenait pas la modif

  4. #24
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Citation Envoyé par Lprofessionnelle Voir le message
    J'avais pas vu le message, donc il faut des jointures supplémentaire suivant le nombre de liaisons entre les nombres que j'ai ?
    Seulement 3 jointures qui sont nécessaires.

    Citation Envoyé par Lprofessionnelle Voir le message
    Je boucle avec un simple foreach() et je voulais modifier l'array en court de route pour modifier l'élément "suivant",....
    Tout dépend de votre code (que je ne vois pas d'ailleurs...), sinon et si vous voulez modifier le même tableau qui contient les données de la requête SQL, vous pouvez utiliser array_walk et avoir le même résultat :
    Code php : 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
    $rows=$stmt->fetchAll();//résultats de la requête SQL
    //parcours + modification et stockage dans $rows["data"] :
    array_walk($rows,function($value,$key)use(&$rows){
    	if(is_numeric($key)){//exclure $rows["data"]
    		$rows['data'][$value['recipe_id']][$value['recipe_group_id']]=[];
    		if(!empty($value['re1_recipe_id'])){
    			$rows['data'][$value['recipe_id']][$value['recipe_group_id']][$value['re1_recipe_id']]=[];
    			if(!empty($value['re2_recipe_group_id'])){
    				$rows['data'][$value['recipe_id']][$value['recipe_group_id']]
    				[$value['re1_recipe_id']][$value['re2_recipe_group_id']]=[];
    				if(!empty($value['re3_recipe_id']))
    					$rows['data'][$value['recipe_id']][$value['recipe_group_id']]
    					[$value['re1_recipe_id']][$value['re2_recipe_group_id']]
    					[$value['re3_recipe_id']]=[];
    			}
    		}
    	}
    });
    //affichage :
    echo "<pre>";
    print_r($rows["data"]);
    echo "</pre>";

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