creation tbl associatif

Eléphant du PHP | 227 Messages

23 avr. 2021, 18:53

Bonjour à tous,

Arrivé en retraite (ouf!), j'ai repris le dev avec PHP pour m'occuper l'esprit et pour apprendre ce language.
Alors l'idée de mon script, c'est de récupérer le chemin avec la fonction "glob" et de n'en garder que les fichiers PHP contenus.

Les valeurs que je souhaite extraire :
=> le nom du fichier sans l'extention
=> Le nom complet du fichier
=> créer un tableau associatif comme ci-dessous :

Exemple:
$array = array (
'page_01' => path_pages.'/page_01.php',
'page_02' => path_pages.'/page_02.php'
};
Voici le mon script (soyez indulgent. merci)
<?php
$chemin = "./dossier/sous-dossier/";
$nom = glob($chemin . "*.{php}", GLOB_BRACE);

echo sizeof($nom); // nombre de fichiers PHP

for ($i = 0; $i < sizeof($nom); $i++) {
$nom2 = pathinfo(basename(($nom[$i])), PATHINFO_FILENAME);
$nom3 = basename(($nom[$i]));

$array = array($nom2 => $nom3); // Creation du tabl associatif à titre d'essai

echo '<a href="'.$chemin.'">'.$nom3.'</a><br>'; // Creation des liens à titre d'essai
}

print_r($array);

foreach($array as $clef => $valeur){
echo $clef. ' => ' .$valeur. '<br>';
}
?>
Pour les liens, en principe il ne devrait pas y avoir de problème.
Par contre, pour le tbl associatif, un gros soucis. Il ne me laisse apparaitre en dehors de la boucle que la dernière valeur.

Je sais, je sais, je m'y prends mal. C'est pourquoi que j'aurai besoin d'un coup de main (avec explication si possible)
=> comment créer un tbl associatif correct (dans mon cas), et comment récupérer les variables en dehors de la boucle ?

Question liée :
j'ai créé une variable => $chemin pour y mettre le chemin du dossier.. Cela fonctionne !
Par contre, en y mettant une "constante", cela ne fonctionne pas. Y a t-il une raison particulière ?
define('PATH_PAGE_ACCUEIL', "./dossier/sous_dossier");
$nom = glob(PATH_PAGE_ACCUEIL . "*.{php}", GLOB_BRACE); Ne fonctionne pas
Merci d'avance pour toutes les idées et éclaircissement. (lol)

Mammouth du PHP | 2703 Messages

23 avr. 2021, 19:20

$chemin = "./dossier/sous-dossier/";
define('PATH_PAGE_ACCUEIL', "./dossier/sous_dossier");
la différence majeure fait que cela fonctionne dans un cas, pas dans l'autre.

https://www.php.net/manual/fr/language.types.array.php explique comment ne pas avoir une seule valeur dans le tableau.

Eléphant du PHP | 227 Messages

23 avr. 2021, 20:17

bonjour or 1,

Ok, pour "define", pas de soucis. Merci
Par contre, j'ai lu la documentation php, mais j'avoue que c'est plutôt ma compréhension qui ne résout pas le problème pour le reste. :)

Eléphant du PHP | 227 Messages

29 avr. 2021, 18:54

Bonjour à tous,

je reviens vers vous, car j'ai toujours encore mon soucis de tbl. Après recherche, j'ai reussi à modifier mon code de la façon suivante :

Code : Tout sélectionner

$lien_top_dossier = "../pages/page_menu_haut/"; $lien_top = glob($lien_top_dossier . "*.{php}", GLOB_BRACE); foreach ($lien_top as $filename) { $ind_01 = pathinfo(basename($filename), PATHINFO_FILENAME); /// affiche le fichier avec son extension $ind_02 = basename($filename); /// affiche le fichier SANS son extension $tbl_array = array($ind_01 => $ind_02); // Creation de l'array if (isset($_GET['p']) and array_key_exists($_GET['p'], $tbl_array)) { // Control de l’existence et on inclut le fichier $_GET['p'] = $_GET['p'] . '.php'; include (htmlspecialchars($lien_top_dossier . $_GET['p'])); } else{ echo "page n'existe pas" ; } }
et j’ appelle les pages de la façon suivante:

Code : Tout sélectionner

<a href="?p=fichier-01"> page-01</a><br> <a href="?p=fichier-02"> page-02</a><br> <a href="?p=fichier-03"> page-03</a><br> <a href="?p=fichier-04"> page-04</a><br> <a href="?p=fichier-05"> page-05</a><br> <a href="?p=fichier-06"> page-06</a>
Cela fonctionne, mais je ne suis pas sur que ce soit la bonne manière, d'autant que si je ajoute un "else" celui ci est rajouté en boucle (normal puisque dans le foreach). Quelle est la manière, svp ?
Merci

Mammouth du PHP | 2703 Messages

29 avr. 2021, 19:16

pour vérifier qu'un fichier existe avant de l'inclure, ce qui est une bonne chose, il y a bien plus simple, en utilisant :
https://www.php.net/manual/fr/function.file-exists.php

Eléphant du PHP | 227 Messages

29 avr. 2021, 19:39

oui, pas de soucis pour file_exists.

Mon problème c'était de savoir s'il est juste d'appeler le contrôle à l'intérieur de la boucle ou bien si pouvait récupérer les valeurs du nouveau tableau ($tbl_array ) dans mon cas ?