Page 1 sur 1

scandir

Posté : 24 mars 2016, 16:18
par kweb13
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>

Re: scandir

Posté : 24 mars 2016, 16:24
par @rthur
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...