scandir

Petit nouveau ! | 7 Messages

24 mars 2016, 16:18

Bonjour à tous,
je n'utilise pas de base de donnée et je souhaiterai listé la contenu d'un répertoire par ordre alphabétique mais trié par lettre.
A
A-client1 | A-client2 | A-client3 | etc....

B
B-client1 | B-client2 | B-client3 | etc....
etc...
j'ai réussi à afficher le contenu du répertoire par ordre alphabétique mais je n'arrive pas regrouper par lettre ???
est-ce possible ?

Merci de vos réponses

voici le script que j'utilise
$allfiles = scandir("../");
$sites = array();
foreach ($allfiles as $site) {
	if ($site != "." && $site != "..") {
		if (is_dir("../".$site."/public_html")) {
			// Créer le lien symbolique
			if (!is_link("./".$site)) { symlink("../".$site."/public_html", "./$site"); }
			$sites[] = $site;
		}
	}
}
sort($sites);

<ul>
<?php 
		natcasesort ($sites);
		foreach($sites as $site): ?>
		<li>
			<a href="<?php echo $site; ?>/">
				<?php echo ucwords(str_replace("_", " ", $site)); ?>
			</a>
		</li>
		<?php endforeach; ?>
</ul>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 mars 2016, 16:24

Bonjour,

Le principe c'est de parcourir chaque élément classée par ordre alphabétique, en vérifiant à chaque fois si la 1ère lettre de l'élément courant est identique à la 1ère lettre de l'élément précédent.
Si oui, alors c'est le même groupe de mot et tout va bien.
Si non, alors c'est un nouveau groupe et tu fais l'action que tu veux puis surtout tu notes que désormais la lettre courante est celle de cet élément là.

En gros :
1) on initialise la variable $groupe_lettre à vide
2) on fait une boucle sur tous les éléments
2a) on compare la 1ère lettre du 1er élément avec la variable $groupe_lettre
=> vu que c'est le 1er, forcément sa première lettre est différente de vide donc voila le 1er on note dans $groupe_lettre la première lettre (probablement A)
2b) et on continue la boucle...
Quand tout le reste a échoué, lisez le mode d'emploi...