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 :

affichage des résultats d'un foreach


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut affichage des résultats d'un foreach
    Bonjour à tous et à toutes,
    J'aurais besoin de vos lumières pour afficher le contenu d'un foreach corectement, le but est de créer un menu de trois niveaux.
    Pour commencer, je créer un array via une requête avec jointure 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
    19
     
    $retour_menu_horizontal = $bdd->prepare("SELECT nom_onglet,lien_onglet,nom_s_ong,lien_s_ong,nom_ss_ong,lien_ss_ong FROM ".TABLE[14]." 
    LEFT JOIN ".TABLE[19]." ON ".TABLE[14].".lien_onglet = ".TABLE[19].".cor_lien_menu 
    LEFT JOIN ".TABLE[20]." ON ".TABLE[19].".lien_s_ong = ".TABLE[20].".cor_lien_onglet
    WHERE auth_view <= :auth ORDER BY ordre_aff, ordre_s_ong ASC");
    $retour_menu_horizontal->bindValue('auth', $level, PDO::PARAM_INT);
    try {
    		$retour_menu_horizontal->execute();
    		while ($retour_menu = $retour_menu_horizontal->fetch())
    			{
    				$menu_complet[$retour_menu['nom_onglet']][$retour_menu['nom_s_ong']][$retour_menu['nom_ss_ong']] = $retour_menu;
    			}
    		$retour_menu_horizontal->closeCursor();
    	}
    catch (PDOException $e)
    	{
    	   echo 'Error : ' . $e->getMessage();
    	   die();
    	}
    Si j'affiche mon array $menu_complet j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<pre>';print_r($menu_complet);echo '</pre>';
    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
    129
    130
    131
    132
    133
    134
    135
    Array
    (
        [Accueil] => Array
            (
                [] => Array
                    (
                        [] => Array
                            (
                                [nom_onglet] => Accueil
                                [0] => Accueil
                                [lien_onglet] => accueil
                                [1] => accueil
                                [nom_s_ong] => 
                                [2] => 
                                [lien_s_ong] => 
                                [3] => 
                                [nom_ss_ong] => 
                                [4] => 
                                [lien_ss_ong] => 
                                [5] => 
                            )
     
                    )
     
            )
     
        [Bracelets] => Array
            (
                [Perles] => Array
                    (
                        [Coquillage] => Array
                            (
                                [nom_onglet] => Bracelets
                                [0] => Bracelets
                                [lien_onglet] => bracelets
                                [1] => bracelets
                                [nom_s_ong] => Perles
                                [2] => Perles
                                [lien_s_ong] => perles
                                [3] => perles
                                [nom_ss_ong] => Coquillage
                                [4] => Coquillage
                                [lien_ss_ong] => coquillage
                                [5] => coquillage
                            )
     
                        [Ourson] => Array
                            (
                                [nom_onglet] => Bracelets
                                [0] => Bracelets
                                [lien_onglet] => bracelets
                                [1] => bracelets
                                [nom_s_ong] => Perles
                                [2] => Perles
                                [lien_s_ong] => perles
                                [3] => perles
                                [nom_ss_ong] => Ourson
                                [4] => Ourson
                                [lien_ss_ong] => ourson
                                [5] => ourson
                            )
     
                    )
     
                [Mailles] => Array
                    (
                        [] => Array
                            (
                                [nom_onglet] => Bracelets
                                [0] => Bracelets
                                [lien_onglet] => bracelets
                                [1] => bracelets
                                [nom_s_ong] => Mailles
                                [2] => Mailles
                                [lien_s_ong] => mailles
                                [3] => mailles
                                [nom_ss_ong] => 
                                [4] => 
                                [lien_ss_ong] => 
                                [5] => 
                            )
     
                    )
     
            )
     
        [Charms] => Array
            (
                [] => Array
                    (
                        [] => Array
                            (
                                [nom_onglet] => Charms
                                [0] => Charms
                                [lien_onglet] => charms
                                [1] => charms
                                [nom_s_ong] => 
                                [2] => 
                                [lien_s_ong] => 
                                [3] => 
                                [nom_ss_ong] => 
                                [4] => 
                                [lien_ss_ong] => 
                                [5] => 
                            )
     
                    )
     
            )
     
        [Contact] => Array
            (
                [] => Array
                    (
                        [] => Array
                            (
                                [nom_onglet] => Contact
                                [0] => Contact
                                [lien_onglet] => contact
                                [1] => contact
                                [nom_s_ong] => 
                                [2] => 
                                [lien_s_ong] => 
                                [3] => 
                                [nom_ss_ong] => 
                                [4] => 
                                [lien_ss_ong] => 
                                [5] => 
                            )
     
                    )
     
            )
     
    )
    Voici comment je boucle dans le array
    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
    echo '<ul>';
    	foreach ($menu_complet as $key_menu => $valeurs_menu)
    		{
     
    				foreach ($valeurs_menu as $key_onglet => $valeurs_onglet)
    					{
    						foreach ($valeurs_onglet as $key_sous_onglet => $valeurs_sous_onglet)
    							{
    								if($nom_onglet != stripslashes($valeurs_sous_onglet['nom_onglet']))
    									{
    										echo '<li>';
    										echo 'nom_onglet : '.$valeurs_sous_onglet['nom_onglet'].'';
    										echo ' lien_onglet : '.$valeurs_sous_onglet['lien_onglet'].'';
    									}
    								if($valeurs_sous_onglet['nom_s_ong'] != '')
    									{
    										echo '<ul>';
    										if($nom_s_ong != stripslashes($valeurs_sous_onglet['nom_s_ong']))
    											{
    												echo '<li>';
    												echo ' nom_s_ong : '.$valeurs_sous_onglet['nom_s_ong'].'';
    												echo ' lien_s_ong : '.$valeurs_sous_onglet['lien_s_ong'].'';
    											}
    											echo '<ul>';
    										if($valeurs_sous_onglet['nom_ss_ong'] != '')
    											{
    												echo '<li>';
    												$nom_onglet = $valeurs_sous_onglet['nom_onglet'];
    												$nom_s_ong = $valeurs_sous_onglet['nom_s_ong'];
    												echo ' nom_ss_ong : '.$valeurs_sous_onglet['nom_ss_ong'].'';
    												echo ' lien_ss_ong : '.$valeurs_sous_onglet['lien_ss_ong'].'';
    												echo '</li>';
    												echo '</ul>';
    											}
    										echo '</li>';
    										echo '</ul>';
    									}
    								echo '</li>';
    							}
    					}
    		}
    echo '</ul>';
    Je voudrais avoir le code suivant avec mes foreach :

    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
    <ul>
    	<li>nom_onglet : Accueil lien_onglet : accueil</li>
    	<li>nom_onglet : Bracelets lien_onglet : bracelets
    		<ul>
    			<li> nom_s_ong : Perles lien_s_ong : perles
    				<ul>
    					<li> nom_ss_ong : Coquillage lien_ss_ong : coquillage</li>
    					<li> nom_ss_ong : Ourson lien_ss_ong : ourson</li>
    				</ul>
    			</li>
    			<li> nom_s_ong : Mailles lien_s_ong : mailles</li>
    		</ul>
    	</li>
    	<li>nom_onglet : Charms lien_onglet : charms</li>
    	<li>nom_onglet : Contact lien_onglet : contact</li>
    </ul>
    mais c'est un carnage lol est ce que quelqu'un peut me donner un coup de main, c'est peut être la requête qui est pas bien faites
    Merci d'avance.

  2. #2
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 316
    Points : 453
    Points
    453
    Par défaut
    Salut,

    voici un menu simple et rapide

    Code sql : 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
     
    CREATE TABLE menus (
        id INT AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(255) NOT NULL,
        link VARCHAR(255) NOT NULL,
        parent_id INT DEFAULT NULL,
        FOREIGN KEY (parent_id) REFERENCES menus(id)
    );
     
    INSERT INTO `menus` (`id`, `title`, `link`, `parent_id`) VALUES
    (1, 'Accueil', 'home.php', NULL),
    (2, 'Bracelets', 'bracelets.php', 1),
    (3, 'Perles', 'perles.php', 2),
    (4, 'Coquillages', '', 3),
    (5, 'Oursons', '', 3);
    COMMIT;

    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
    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
     
    <?php
    // Connexion à la base de données
    $mysqli = new mysqli('localhost', 'votre_utilisateur', 'votre_mot_de_passe', 'votre_base_de_donnees');
     
    // Vérification de la connexion
    if ($mysqli->connect_error) {
        die("Connection failed: " . $mysqli->connect_error);
    }
     
    // Requête pour récupérer tous les éléments de menu
    $result = $mysqli->query("SELECT * FROM menus ORDER BY parent_id ASC, id ASC");
     
    // Organiser les éléments en une structure hiérarchique
    $menuItems = array();
    while ($row = $result->fetch_assoc()) {
        $menuItems[$row['id']] = $row;
        $menuItems[$row['id']]['children'] = array();
    }
     
    foreach ($menuItems as $id => &$menuItem) {
        if ($menuItem['parent_id'] != null) {
            $menuItems[$menuItem['parent_id']]['children'][] = &$menuItem;
        }
    }
     
    // Filtrer les éléments de niveau supérieur
    $topLevelMenuItems = array_filter($menuItems, function ($menuItem) {
        return $menuItem['parent_id'] == null;
    });
     
    // Fonction pour afficher récursivement les éléments de menu
    function displayMenu($items) {
        echo '<ul>';
        foreach ($items as $item) {
            echo '<li><a href="' . $item['link'] . '">' . $item['title'] . '</a>';
            if (!empty($item['children'])) {
                displayMenu($item['children']);
            }
            echo '</li>';
        }
        echo '</ul>';
    }
     
    // Affichage du menu
    displayMenu($topLevelMenuItems);
     
    // Fermeture de la connexion à la base de données
    $mysqli->close();
    ?>

    Nom : res.png
Affichages : 168
Taille : 4,9 Ko

  3. #3
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    Merci de m'avoir donné du code c'est très gentil mais je souhaite vraiment parvenir à faire ça avec mes tables actuelles.
    Premièrement je ne veux pas tout refaire dans l'administration et deuxièmement ça m’énerve de rien comprendre des qu'il y à plus de deux niveaux dans un foreach.
    J'y suis presque, il faut juste que j'arrive à enlever le <ul> et </ul> qui se créait quand il n'y a pas d'onglet de troisième niveau.
    Voici le code actuel
    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
     
    $retour_menu_horizontal = $bdd->prepare("SELECT nom_onglet,lien_onglet,nom_s_ong,lien_s_ong,nom_ss_ong,lien_ss_ong FROM ".TABLE[14]." 
    LEFT JOIN ".TABLE[19]." ON ".TABLE[14].".lien_onglet = ".TABLE[19].".cor_lien_menu 
    LEFT JOIN ".TABLE[20]." ON ".TABLE[19].".lien_s_ong = ".TABLE[20].".cor_lien_onglet
    WHERE auth_view <= :auth ORDER BY ordre_aff, ordre_s_ong ASC");
    $retour_menu_horizontal->bindValue('auth', $level, PDO::PARAM_INT);
    try {
    		$retour_menu_horizontal->execute();
    		while ($retour_menu = $retour_menu_horizontal->fetch())
    			{
    				$tableau_onglet[$retour_menu['nom_onglet']][$retour_menu['lien_onglet']][$retour_menu['nom_s_ong']][$retour_menu['lien_s_ong']][$retour_menu['nom_ss_ong']] = $retour_menu['lien_ss_ong'];
    			}
    		$retour_menu_horizontal->closeCursor();
    	}
    catch (PDOException $e)
    	{
    	   echo 'Error : ' . $e->getMessage();
    	   die();
    	}
    echo '<ul>';
    foreach ($tableau_onglet as $nom_onglet => $valeurs_menu)
    	{
    		echo '<li>';
    		echo 'nom_onglet : '.$nom_onglet.'';
    		foreach ($valeurs_menu as $lien_onglet => $valeurs_foreach_2)
    			{
    				echo ' lien_onglet : '.$lien_onglet.'';
    				foreach ($valeurs_foreach_2 as $nom_s_ong => $valeurs_foreach_3)
    					{
    						if($nom_s_ong != '')
    							{
    								echo '<ul>';
    								echo '<li>';
    								echo ' nom_s_ong : '.$nom_s_ong.'';
    								foreach ($valeurs_foreach_3 as $lien_s_ong => $valeurs_foreach_4)
    									{
    										echo ' lien_s_ong : '.$lien_s_ong.'';
    										echo '<ul>';
    										foreach ($valeurs_foreach_4 as $nom_ss_ong => $valeurs_foreach_5)
    											{
    												if($nom_ss_ong != '')
    													{
    														echo '<li>';
    														echo ' nom_ss_ong : '.$nom_ss_ong.' lien_ss_ong : '.$valeurs_foreach_5.'';
    														echo '</li>';
    													}
    											}
    										echo '</ul>';
    									}
    								echo '</li>';
    								echo '</ul>';
    							}
    					}
    			}
    		echo '</li>';
    	}
    echo '</ul>';
     
    echo '<pre>';print_r($tableau_onglet);echo '</pre>';
    Ce qui donne
    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
     
    <ul>
    	<li>nom_onglet : Accueil lien_onglet : accueil</li>
    	<li>nom_onglet : Bracelets lien_onglet : bracelets
    		<ul>
    			<li> nom_s_ong : Perles lien_s_ong : perles
    				<ul>
    					<li> nom_ss_ong : Coquillage lien_ss_ong : coquillage</li>
    					<li> nom_ss_ong : Ourson lien_ss_ong : ourson</li>
    				</ul>
    			</li>
    		</ul>
    		<ul>
    			<li> nom_s_ong : Mailles lien_s_ong : mailles
    			<ul></ul>
    			</li>
    		</ul>
    	</li>
    	<li>nom_onglet : Charms lien_onglet : charms</li>
    	<li>nom_onglet : Contact lien_onglet : contact</li>
    </ul>
     
     
    Array
    (
        [Accueil] => Array
            (
                [accueil] => Array
                    (
                        [] => Array
                            (
                                [] => Array
                                    (
                                        [] => 
                                    )
     
                            )
     
                    )
     
            )
     
        [Bracelets] => Array
            (
                [bracelets] => Array
                    (
                        [Perles] => Array
                            (
                                [perles] => Array
                                    (
                                        [Coquillage] => coquillage
                                        [Ourson] => ourson
                                    )
     
                            )
     
                        [Mailles] => Array
                            (
                                [mailles] => Array
                                    (
                                        [] => 
                                    )
     
                            )
     
                    )
     
            )
     
        [Charms] => Array
            (
                [charms] => Array
                    (
                        [] => Array
                            (
                                [] => Array
                                    (
                                        [] => 
                                    )
     
                            )
     
                    )
     
            )
     
        [Contact] => Array
            (
                [contact] => Array
                    (
                        [] => Array
                            (
                                [] => Array
                                    (
                                        [] => 
                                    )
     
                            )
     
                    )
     
            )
     
    )

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 411
    Points : 4 853
    Points
    4 853
    Par défaut
    Bonjour,

    Le problème est au niveau des valeurs lien_onglet et lien_s_ong que tu veux récupérer bien avant de boucler les tableaux, je te propose une solution simple avec la même structure initiale du tableau afin de ne pas changer grandes choses dans ton 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
    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
    $menu_complet=Array(
        "Accueil" => Array(
                null => Array(
                        null => Array(
                                'nom_onglet' => 'Accueil',
                                'lien_onglet' => 'accueil',
                                'nom_s_ong' => null,
                                'lien_s_ong' => null,
                                'nom_ss_ong' => null,
                                'lien_ss_ong' => null
                            )
     
                    )
     
            ),
     
        "Bracelets" => Array
            (
                "Perles" => Array
                    (
                        "Coquillage" => Array
                            (
                                "nom_onglet" => 'Bracelets',
                                "lien_onglet" => 'bracelets',
                                "nom_s_ong" => 'Perles',
                                "lien_s_ong" => 'perles',
                                "nom_ss_ong" => 'Coquillage',
                                "lien_ss_ong" => 'coquillage'
                            ),
     
                        "Ourson" => Array
                            (
                                "nom_onglet" => 'Bracelets',
                                "lien_onglet" => 'bracelets',
                                "nom_s_ong" => 'Perles',
                                "lien_s_ong" => 'perles',
                                "nom_ss_ong" => 'Ourson',
                                "lien_ss_ong" => 'ourson'
                            )
     
                    ),
     
                "Mailles" => Array
                    (
                        null => Array
                            (
                                "nom_onglet" => 'Bracelets',
                                "lien_onglet" => 'bracelets',
                                "nom_s_ong" => 'Mailles',
                                "lien_s_ong" => 'mailles',
                                "nom_ss_ong" => null,
                                "lien_ss_ong" => null
                            )
     
                    )
     
            ),
     
        "Charms" => Array
            (
                null => Array
                    (
                        null => Array
                            (
                                "nom_onglet" => 'Charms',
                                "lien_onglet" => 'charms',
                                "nom_s_ong" => null,
                                "lien_s_ong" => null,
                                "nom_ss_ong" => null,
                                "lien_ss_ong" => null
                            )
     
                    )
     
            ),
     
        "Contact" => Array
            (
                null => Array
                    (
                        null => Array
                            (
                                "nom_onglet" => 'Contact',
                                "lien_onglet" => 'contact',
                                "nom_s_ong" => null,
                                "lien_s_ong" => null,
                                "nom_ss_ong" => null,
                                "lien_ss_ong" => null
                            )
     
                    )
     
            )
     
    );
    Tu peux récupérer les valeurs de lien_onglet et lien_s_ong directement avec les variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $lienOnglet=$sousOnglet[array_keys($sousOnglet)[0]]
    	[array_keys($sousOnglet[array_keys($sousOnglet)[0]])[0]]
    	['lien_onglet'];
    //et
    $lienSousOnglet=$s_menu[array_keys($s_menu)[0]]['lien_s_ong'];
    à l'intérieur de la boucle corréspondante.
    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
    23
    24
    25
    26
    27
    28
    29
    $html="<ul>";
    //parcourir les onglets 
    foreach ($menu_complet as $nomOnglet => $sousOnglet){
    	$lienOnglet=$sousOnglet[array_keys($sousOnglet)[0]]
    	[array_keys($sousOnglet[array_keys($sousOnglet)[0]])[0]]
    	['lien_onglet'];
     
    	$html.='<li>nom_onglet : '.$nomOnglet.", lien onglet :".$lienOnglet;
     
    	if (!empty(array_keys($sousOnglet)[0])){
    		$html.="<ul>";
    		foreach ($sousOnglet as $nomSousOnglet => $s_menu){
    			$lienSousOnglet=$s_menu[array_keys($s_menu)[0]]['lien_s_ong'];
    			$html.="<li>".$nomSousOnglet.", lien_s_ong :".$lienSousOnglet;
    			foreach ($s_menu as $nom_ss_ong => $ss_menu){
    				if(!empty($nom_ss_ong)){
    					if(array_keys($s_menu)[0]==$nom_ss_ong) $html.="<ul>";
    					$html.= '<li> nom_ss_ong : '.$nom_ss_ong.', lien_ss_ong :'.$ss_menu['lien_ss_ong'].'</li>';
    					if(array_keys($s_menu)[count($s_menu)-1]==$nom_ss_ong) $html.="</ul>";
    				}
    			}
    			$html.= "</li>";
    		}
    		$html.= "</ul>";
    	}
    	$html.= '</li>';
    }
    $html.= '</ul>';
    echo $html;

    Le résultat final du menu HTML
    Code html : 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
    <ul>
      <li>nom_onglet : Accueil, lien onglet : accueil</li>
      <li>nom_onglet : Bracelets, lien onglet : bracelets
          <ul>
               <li>Perles, lien sous onglet : perles
                   <ul>
                        <li> nom_ss_ong : Coquillage, lien_ss_ong :coquillage</li>
                        <li> nom_ss_ong : Ourson, lien_ss_ong :ourson</li>
                   </ul>
               </li>
               <li>Mailles, lien sous onglet : mailles</li>
          </ul>
      </li>
       <li>nom_onglet : Charms, lien onglet : charms</li>
       <li>nom_onglet : Contact, lien onglet : contact</li>
    </ul>

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous,
    déjà, vu le nombre de réponses après ta proposition (Toufik), l'intéressé mets un certain temps à l'utiliser...

    N'étant pas un as du PHP, j'essaie de la comprendre pour en savoir un peu plus. Je la teste donc en local.

    J'ai écrit ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function aff_menu($menu_complet){
        $sousOnglet = array_keys($menu_complet);
     
        $lienOnglet=$sousOnglet[array_keys($sousOnglet)[0]]
        [array_keys($sousOnglet[array_keys($sousOnglet)[0]])[0]]
        ['lien_onglet'];
    //et
        //$lienSousOnglet=$s_menu[array_keys($s_menu)[0]]['lien_s_ong'];
    }
     
    aff_menu($menu_complet);
    et j'ai ce message d'erreur :
    Fatal error: Uncaught TypeError: array_keys(): Argument #1 ($array) must be of type array, string given in C:\projets\dvp\divers\dvp\toufik83\menu_complet.php:106 Stack trace: #0 C:\projets\dvp\divers\dvp\toufik83\menu_complet.php(106): array_keys('Accueil') #1 C:\projets\dvp\divers\dvp\toufik83\menu_complet.php(112): aff_menu(Array) #2 {main} thrown in C:\projets\dvp\divers\dvp\toufik83\menu_complet.php on line 106
    En cherchant ce qui va pas, je m'aperçois que $sousOnglet[array_keys($sousOnglet)[0]] est une chaine de caractères alors que le code suppose que c'est un tableau. Quel est mon problème, SVP ? Peux-tu détailler ta proposition, Toufik, (car je suis largué ) ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 411
    Points : 4 853
    Points
    4 853
    Par défaut
    Bonjour,

    Citation Envoyé par laurentSc Voir le message
    Quel est mon problème, SVP ? Peux-tu détailler ta proposition,
    Oui, le problème est au niveau de $sousOnglet = array_keys($menu_complet); , ceci ne représente que les clefs mais pas les valeurs du tableau et son contenu est un tableau de clefs ["Accueil","Bracelets","Charms","Contact"] alors que dans mon code la valeur de $sousOnglet représente la valeur réelle de chaque élément du tableau initial puisque c'est un paramètre de la boucle foreach foreach ($menu_complet as $nomOnglet => $sousOnglet), donc c'est forcément un tableau.

    Pour corriger ta fonction, il faudrait d'abord modifier le nom de son paramètre $menu_complet, parce qu'il a le même nom que le tableau initial, donc évite de mettre des noms de paramètres identiques à celles des variables utilisées dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function aff_menu($menu){//nom paramètre $menu
        $sousOnglet = $menu[array_keys($menu)[0]];
    ...}
    Je vais essayer de faire plus simple pour mieux t'expliquer l'accès aux valeurs d'un tableau multidimensionnel, on va prendre l'onglet "Bracelets" comme exemple puisqu'il contient des sous et sous sous onglets.

    Pour récupérer les valeurs de Bracelets, on peut le faire directement avec $menu_complet["Bracelets"];, sauf que dans cet exemple on ne connait pas les noms des clefs du tableau, alors il faudrait les récupérer automatiquement par exemple avec $keys = array_keys($menu_complet); ce qui renvoie un tableau ["Accueil","Bracelets","Charms","Contact"]. Ensuite, pour accéder à Bracelets, son index dans le tabeleau des clefs est 1, donc si on écrit $bracelets=$menu_complet[$keys[1]] c'est la même chose que $bracelets=$menu_complet["Bracelets"] et la même chose aussi que $bracelets=$menu_complet[array_keys($menu_complet)[1]], si on affiche le résultat avec var_dump ou peu importe.. le retour est les clefs=>valeurs (ou sous onglets) de l'onglet Bracelets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    array(2) {
      ["Perles"]=>
      array(2) {
        ["Coquillage"]=>array(6) {...}
        ["Ourson"]=>array(6) {...}
      }
      ["Mailles"]=>
      array(1) {
        [""]=>array(6) {...}
      }
    }
    Maintenant, si je veux accéder au sous onglet "Perles",
    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
    $bracelets=$menu_complet[$keys[1]];//on a déjà l'onglet Bracelets ici
     
    //donc, si on récupère les clefs de $bracelets, on pourra accéder à Perles et Mailles
    $perles=$bracelets[array_keys($bracelets)[0]];// vaut à $bracelets["Perles"] puisque Perles et l'index 0 dans les clefs de $bracelets
     
    //ou bien on utilisant le tableau initial
    $perles=$menu_complet[ $keys[1] ][ array_keys( $menu_complet[ $keys[1] ] )[0] ];
     
    //on observant le code c'est comme un $Valeur[ array_keys($Valeur)[0] ] dont $Valeur=$menu_complet[$keys[1]]
     
    //maintenant pour accéder à Ourson de Perles
    $ourson=$perles[array_keys($perles)[1]];
     
    //ou bien avec le tableau initial
    $ourson=$menu_complet[$keys[1]]
    [array_keys($menu_complet[$keys[1]])[0]]
    [array_keys($menu_complet[$keys[1]][array_keys($menu_complet[$keys[1]])[0]])[1]];
    Pour simplifier la compréhension des index d'un tableau multidimensionnel, l'onglet Bracelets par exemple qui est représenté par $bracelets=$menu_complet[$keys[1]], si je veux accéder à son premier sous onglet Perles, j'ajoutes les crochets à la fin de $bracelets[], puis je mets un array_keys($bracelets)[0] à l'intérieur des crochets, qui permet de récupérer l'index "Perles" ce qui devient $perles=$bracelets[array_keys($bracelets)[0]];, ensuite, si je veux accéder au premier sous sous onglet de "Perles", toujours la même chose, rajouter des crochets à la fin de $perles[] et mettre la première clef à l'intérieur $coquillage=$perles[array_keys($perles)[0]] et ainsi de suite....

    Si tu veux créer une fonction personnalisée qui affiche le menu HTML, tu peux faire comme suit
    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
    function aff_menu($menu){
    	$html="<ul>";
    	foreach($menu as $nomOnglet=>$onglet){
    		$sousOnglet0=$onglet[array_keys($onglet)[0]];
    		$lienOnglet=$sousOnglet0[array_keys($sousOnglet0)[0]]["lien_onglet"];
    		$html.="<li>$nomOnglet , lien : $lienOnglet";
    		if(array_keys($onglet)[0]!=null){
    			$html.="<ol>";
    			foreach($onglet as $nomSousOnglet=>$sousOnglet){
    				$lienSousOnglet=$sousOnglet[array_keys($sousOnglet)[0]]['lien_s_ong'];
    				$html.="<li>$nomSousOnglet , lien : $lienSousOnglet";
    				if(array_keys($sousOnglet)[0]!=null){
    					$html.="<ol>";
    					foreach($sousOnglet as $nomSousSousOnglet=>$sousSousOnglet){
    						$lienSousSousOnglet=$sousSousOnglet['lien_ss_ong'];
    						$html.="<li>$nomSousSousOnglet , lien : $lienSousSousOnglet</li>";
    					}
    					$html.="</ol>";
    				}
    				$html.="</li>";
    			}
    			$html.='</ol>';
    		}
    		$html.="</li>";
    	}
    	$html.="</ul>";
    	return $html;
    }
    $menuHtml=aff_menu($menu_complet);
    echo $menuHtml;
    Voilà je ne sais pas si j'été assez clair en t'expliquant les choses, mais bon ... dès que tu auras compris le principe, les tableaux multidimensionnels te seront un gâteau .

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci pour la réponse mais pas le temps de regarder avant cet après-midi ou demain matin...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci, j'ai regardé.
    Autant, je comprends ton code, autant pas sûr du tout de savoir en faire autant...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  9. #9
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 411
    Points : 4 853
    Points
    4 853
    Par défaut
    Bonjour,
    Citation Envoyé par laurentSc Voir le message
    Merci, j'ai regardé.
    Autant, je comprends ton code, autant pas sûr du tout de savoir en faire autant...
    Si si Laurent, je sais que tu peux le faire aussi , mais c'est probablement ce genre d'écriture qui te choque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ourson=
    $menu_complet[$keys[1]]
    [array_keys($menu_complet[$keys[1]])[0]]
    [array_keys($menu_complet[$keys[1]][array_keys($menu_complet[$keys[1]])[0]])[1]];
    , tu pense que je l'écris à la main ? ben non, c'est seulement du copier/coller :
    • Copier la ligne 2 $menu_complet[$keys[1]]
    • Rajouter les crochets et array_keys()[0] après la ligne 2, pour obtenir $menu_complet[$keys[1]][array_keys()[0]]
    • Coller la valeur copiée à l'intérieur des paranthèses de array_keys() pour obtenir $menu_complet[$keys[1]][array_keys($menu_complet[$keys[1]])[0]]
    et voilà on obtient le premier sous onglet de l'onglet Bracelets, après c'est la même chose, sauf que cette fois il faut copier toute la valeur précédente c'est à dire tout le tableau, les lignes 2 et 3, puis rajouter les crochets après avec array_keys()[1] (1 pour récupérer Ourson, 0 pour récupérer Coquillage) dedans, et coller les lignes 2 et 3 à l'intérieur, et hop on obtient le sous sous onglet Coquillage du sous onglet Perles de l'onglet Bracelets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ourson=
    $menu_complet[$keys[1]]
    [array_keys($menu_complet[$keys[1]])[0]]
    [array_keys($menu_complet[$keys[1]][array_keys($menu_complet[$keys[1]])[0]])[1]];

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bonjour à 3h05, c'est pas banal... Tu travailles que la nuit ?
    OK, ça a l'air pas trop dur, mais que restera-t-il dans quelques mois ?
    Si besoin, y a cette discussion et j'ai aussi sauvegardé ton code...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #11
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 411
    Points : 4 853
    Points
    4 853
    Par défaut
    Bonjour Laurent,

    Oui je ne travaille que la nuit pendant ce mois de Ramadan, le matin je n'ai plus envie de coder quoi que se soit .

Discussions similaires

  1. Problème d'affichage des données avec c:forEach sur page jsp
    Par karamaster dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 30/09/2023, 22h27
  2. Réponses: 2
    Dernier message: 29/10/2022, 15h17
  3. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  4. Forcer l'affichage des dizaines...
    Par pataluc dans le forum Langage
    Réponses: 4
    Dernier message: 26/11/2002, 19h38
  5. [VB6] [Flexgrid] Format d'affichage des numériques
    Par yansolo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/10/2002, 21h00

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