Générer du JSON en PHP
xxxinconitoxxx
Messages postés
151
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je voudrais créer "ce format" (voir code 1) de JSON en php depuis une fonction qui liste tous les fichiers contenu dans un dossier (et sous dossier) (voir code 2).
Je sais que pour réaliser ceci il me faut un tableau où je regroupe tous les fichiers trouvés mais je ne sais pas trop comment faire, je m'exprime peut être mal donc je vais schématiser tous sa :
1 - On liste "dossier1" :
- C'est un fichier, alors on l'ajoute au tableau
- C'est un dossier, alors on le liste donc on recommence la boucle
2 - On exécute "json_encode" sur le tableau
3 - On "echo" le "json_encode"
Le problème c'est que je ne sait pas comment créer ce tableau ...
Code 1 :
Code 2 :
Ce que j'obtient actuellement :
je voudrais créer "ce format" (voir code 1) de JSON en php depuis une fonction qui liste tous les fichiers contenu dans un dossier (et sous dossier) (voir code 2).
Je sais que pour réaliser ceci il me faut un tableau où je regroupe tous les fichiers trouvés mais je ne sais pas trop comment faire, je m'exprime peut être mal donc je vais schématiser tous sa :
1 - On liste "dossier1" :
- C'est un fichier, alors on l'ajoute au tableau
- C'est un dossier, alors on le liste donc on recommence la boucle
2 - On exécute "json_encode" sur le tableau
3 - On "echo" le "json_encode"
Le problème c'est que je ne sait pas comment créer ce tableau ...
Code 1 :
{
"fichier1": {
"path": "dossier1",
"time": "20/10/2015 10:57:42"
},
"fichier2": {
"path": "dossier/2015",
"time": "20/10/2015 10:57:42"
}
}
Code 2 :
mcData('MinecraftResources'); function mcData($dirName) { $dir = opendir($dirName); while ($file = readdir($dir)) { if(($file != '.') && ($file != '..')) { if (is_dir($dirName.'/'.$file)) { mcData($dirName.'/'.$file); } else { //Création du json ici -----> $fileTime = date("d/m/Y H:i:s", filemtime($dirName.'/'.$file)); $mcArray = array( 'path' => $dirName, 'time' => $fileTime ); echo json_encode($mcArray); // <----- } } } closedir($dir); }
Ce que j'obtient actuellement :
{"path":"MinecraftResources","time":"21\/10\/2015 12:29:23"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:24"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:28"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:28"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:28"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:27"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:27"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:24"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:26"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:26"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:25"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:25"}{"path":"MinecraftResources\/mods","time":"21\/10\/2015 12:29:25"}{"path":"MinecraftResources","time":"21\/10\/2015 12:29:19"}{"path":"MinecraftResources","time":"21\/10\/2015 12:29:28"}{"path":"MinecraftResources\/versions\/1.8.8","time":"21\/10\/2015 12:29:32"}{"path":"MinecraftResources\/versions\/1.8.8","time":"21\/10\/2015 12:29:28"}
A voir également:
- Créer un fichier json en php
- Fichier bin - Guide
- Creer un fichier .bat - Guide
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Comment réduire la taille d'un fichier - Guide
2 réponses
Bah, il y a deux problèmes. le premier étant que tu crées un nouvel array $mcArray et que tu lui appliques json_encode dans la boucle, ce qui te renvoie ainsi un tableau pour chaque fichier trouvé. Ce que tu obtients est donc plusieurs tableaux, soit un par ligne dans ton exemple. Ensuite, tu dois créer un tableau multidimensionnel dont la première valeur est un autre tableau possédant le nom du fichier comme clé. Le deuxième tableau détiendra ses informations. Ce bout de code t'aide un peu?
//Création du json ici -----> $fileTime = date("d/m/Y H:i:s", filemtime($dirName.'/'.$file)); //Les crochets [] ont le même //effet que array_push. Il faut //empiler tous les fichiers dans //un énorme tableau, et puis //ensuite l'encoder. $mcArray[$dirName.'/'.$file] = array( 'path' => $dirName, 'time' => $fileTime ); } } } closedir($dir); //Maintenant, json_encode est à l'extérieur //de la boucle, il ne sera appliqué ainsi qu'un seule //fois, lorsque le tableau détiendra tous les fichiers. echo json_encode($mcArray);
Bon, alors prise 2! Certains ont publié leur code sur le net, alors eh bah je m'en suis quelque peu inspiré. En souhaitant que ça fonctionne cette fois! Bon courage pour la suite, =?
function mcData($mainDir) { $mcArray = array(); $directories = array($mainDir); //Tant que l'array $directories n'est pas vide. while (null !== ($dir = array_pop($directories))) { if ($dh = opendir($dir)) { //Ici, on rajoute false !==, parce qu'il me semble sinon qu'un fichier ou un dossier appelé 0 (soit false!) pourrait mettre fin à la boucle! while (false !== ($file = readdir($dh))) { if (($file != '.') && ($file != '..')) { $path = "$dir/$file"; if (is_dir($path)) $directories[] = $path; else $mcArray[$path] = array( 'path' => $dir, 'time' => date("d/m/Y H:i:s", filemtime($path)) ); } } closedir($dh); } } return json_encode($mcArray); }
hmm je tenterai de t'aider dès que je peux de nouveau! ;)