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 :

Array mal formaté


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut Array mal formaté
    Bonjour,
    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
    $pages = array(
    	1 => array('label'=>'Home', 'slug'=>'home', 'parent'=>0),
    	2 => array('label'=>'About us', 'slug'=>'about-us', 'parent'=>0),
    	3 => array('label'=>'Issue', 'slug'=>'issue', 'parent'=>2),
    	4 => array('label'=>'Background', 'slug'=>'background', 'parent'=>2),
    	5 => array('label'=>'Profile', 'slug'=>'profile', 'parent'=>2),
    	6 => array('label'=>'Test', 'slug'=>'test', 'parent'=>2),
    	7 => array('label'=>'Procedures', 'slug'=>'procedures', 'parent'=>6),
    	8 => array('label'=>'Company development plan', 'slug'=>'company-development-plan', 'parent'=>2),
    	3 => array('label'=>'Team', 'slug'=>'team', 'parent'=>2),
    	10 => array('label'=>'Solutions', 'slug'=>'solutions', 'parent'=>0),
    	11 => array('label'=>'News & events', 'slug'=>'news-events', 'parent'=>0),
    	12 => array('label'=>'Partners', 'slug'=>'partners', 'parent'=>0),
    	13 => array('label'=>'Contact us', 'slug'=>'contact-us', 'parent'=>0)
    );
     
    function recurse_tree($array, $id) {
    	$result = array();
    	foreach ($array as $key => $node) {
    		if ( $key == $id ) {
    			array_push($result, array('id' => $key, 'label' => $node['label'], 'slug' => $node['slug'], 'parent' => $node['parent']));
    			if ( $node['parent'] > 0 ) array_push($result, recurse_tree($array, $node['parent']));
    		}
    	}
    	return $result;
    }
     
    echo '<pre>';
    print_r(recurse_tree($pages, 7));
    echo '</pre>';
    Résultat :
    Array
    (
    [0] => Array
    (
    [id] => 7
    [label] => Procedures
    [slug] => procedures
    [parent] => 6
    )

    [1] => Array
    (
    [0] => Array
    (
    [id] => 6
    [label] => Test
    [slug] => test
    [parent] => 2
    )

    [1] => Array
    (
    [0] => Array
    (
    [id] => 2
    [label] => About us
    [slug] => about-us
    [parent] => 0
    )

    )

    )

    )
    Moi je souhaite ce retour :
    Array
    (
    [0] => Array
    (
    [id] => 7
    [label] => Procedures
    [slug] => procedures
    [parent] => 6
    )

    [1] => Array
    (
    [id] => 6
    [label] => Test
    [slug] => test
    [parent] => 2
    )
    [2] => Array
    (
    [id] => 2
    [label] => About us
    [slug] => about-us
    [parent] => 0
    )

    )
    Comment faire ?

    Merci d'avance...

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    --

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    ça sent bon les recherches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($pages as $key=>$value) {
    	$result[$key] = $value;
    	$result[$key]['id'] = $key;
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    papajoker, honnêtement que je ne comprends rien dans votre propos.

    Merci d'avance...

    sabotage, plus de récursion ? Et la recurse_tree($array, $id) dans tout ça ?

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    array_merge() a la place de array_push()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function getTree(&$array,$id){
    	if ($id<1) return array();
    	foreach($array as $key=>$node) {
    		if ($id==$key){
    			$result[$key] = $node;
    			$result[$key]['id'] = $key;
    			$result= array_merge($result, getTree($array,$node['parent']));
    		}
    	}
    	return $result;
    }
    edit

    j'avais pas compris (comme sabo) le probleme !
    tu donnes l'enfant et il faut remonter tout l'arbre pour afficher les parents, grand-parents ...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il n'y a pas de recursion dans ton souhait de sortie.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Si si, dans le code de sa fonction, il y a bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $node['parent'] > 0 ) array_push($result, recurse_tree($array, $node['parent']));
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    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
    <?php
    $pages = array(
    	1 => array('label'=>'Home', 'slug'=>'home', 'parent'=>0),
    	2 => array('label'=>'About us', 'slug'=>'about-us', 'parent'=>0),
    	3 => array('label'=>'Issue', 'slug'=>'issue', 'parent'=>2),
    	4 => array('label'=>'Background', 'slug'=>'background', 'parent'=>2),
    	5 => array('label'=>'Profile', 'slug'=>'profile', 'parent'=>2),
    	6 => array('label'=>'Test', 'slug'=>'test', 'parent'=>2),
    	7 => array('label'=>'Procedures', 'slug'=>'procedures', 'parent'=>6),
    	8 => array('label'=>'Company development plan', 'slug'=>'company-development-plan', 'parent'=>2),
    	3 => array('label'=>'Team', 'slug'=>'team', 'parent'=>2),
    	10 => array('label'=>'Solutions', 'slug'=>'solutions', 'parent'=>0),
    	11 => array('label'=>'News & events', 'slug'=>'news-events', 'parent'=>0),
    	12 => array('label'=>'Partners', 'slug'=>'partners', 'parent'=>0),
    	13 => array('label'=>'Contact us', 'slug'=>'contact-us', 'parent'=>0)
    );
     
    function recurse_tree($array, $id, $result = array()) {
    	$tab = $array[$id];
    	array_push($result, array_merge(array('id'=>$id), $tab));
    	if($tab['parent']){
    		$result = recurse_tree($array, $tab['parent'], $result);
    	}
    	return $result;
    }
     
    var_dump(recurse_tree($pages, 7));
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    Je Prefere mon code Bovino, je passe par reference $array

    et pas de if ($id==$key) ? tu ne recuperes pas uniquement le parent ?

    code testé et me retourne bien uniquement la famille (parent) 7 a 6 comme parent et 2 comme grand papa

    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
    Array
    (
        [0] => Array
            (
                [label] => Procedures
                [slug] => procedures
                [parent] => 6
                [id] => 7
            )
     
        [1] => Array
            (
                [label] => Test
                [slug] => test
                [parent] => 2
                [id] => 6
            )
     
        [2] => Array
            (
                [label] => About us
                [slug] => about-us
                [parent] => 0
                [id] => 2
            )
     
    )

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function recurse_tree($array, $id) {
    	$result = array();
    	foreach ($array as $key => $node) {
    		if ( $key == $id ) {
    			$result[] = array('id' => $key, 'label' => $node['label'], 'slug' => $node['slug'], 'parent' => $node['parent']);
    			if ( $node['parent'] > 0 ) $result = array_merge($result, recurse_tree($array, $node['parent']));
    		}
    	}
    	return $result;
    }
     
    echo '<pre>';
    print_r(array_reverse(recurse_tree($pages, 7)));
    echo '</pre>';

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    Citation Envoyé par papajoker Voir le message
    array_merge() a la place de array_push()
    ok ca marche , met le sujet en résolu

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    @papajoker : moi je préfère le mien parce que l'affichage correspond à ce qui est demandé (le 'id' en premier) !
    Quoi ? Qui me parle de mauvaise foi ?

    Sinon
    pas de if ($id==$key) ?
    Bah... pas besoin de boucler sur tous les éléments puisque tu connais le rang de l'élément qui t'intéresse. Donc je fais directement
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Une bonne partie d'algo. merci à vous tous !

  14. #14
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function fetch($src, $id, &$result = array())
    {
        $result[] = array('id' => $id) + $src[$id];
        if ($src[$id]['parent']) {
            fetch($src, $src[$id]['parent'], $result);
        }
        return $result;
    }
     
    echo '<pre>';
    var_dump(fetch($pages, 7));

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sortie 10g vers excel mal formatée
    Par mongilotti dans le forum Reports
    Réponses: 1
    Dernier message: 17/03/2010, 09h40
  2. Réponses: 6
    Dernier message: 23/02/2010, 14h57
  3. [eCommerce] Montant objet mal formaté
    Par bernard26000 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 01/02/2008, 08h16
  4. [SOAP] requête cliente mal formatée
    Par mickael.guilbert dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 11/12/2007, 15h03
  5. [PrintWriter] fichier mal formaté
    Par delph1983 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 08/02/2007, 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