Page 1 sur 1

index.php / trie par ordre alphabétique des liens

Posté : 13 mai 2019, 00:33
par GeGaX
Bonjour,
Je souhaite trier les liens, qui s'affichent dans une table, par ordre alphabétique (noms des fichiers).
Voici le code actuel :
    function humanFileSize($bytes) {
        $bytes = floatval($bytes);
        $arBytes = array(
            0 => array(
                'UNIT' => 'Mo',
                'VALUE' => pow(1024, 2)
            ),
            1 => array(
                'UNIT' => 'Ko',
                'VALUE' => 1024
            ),
            2 => array(
                'UNIT' => 'o',
                'VALUE' => 1
            ),
        );
        
        foreach($arBytes as $arItem) {
            if($bytes >= $arItem['VALUE']) {
                $result = $bytes / $arItem['VALUE'];
                $result = strval(round($result, 2))." ".$arItem['UNIT'];
                break;
            }
        }
        return $result;
    }

    function mkmap($dir) {
        $folder = opendir ($dir);
        echo '<ul>';
        echo '<table border="1">';
        echo '<tr><th>Race</th><th>Size</th><th>Last modified</th></tr>';
        while ($file = readdir ($folder)) {
            if ($file != "." && $file != "..") {
                $pathfile = $dir.'/'.$file;
                if (filetype($pathfile) == 'dir') {
                    mkmap($pathfile);
                } else {
                    if (strpos($file, '.kmz') !== false) {
                        $bytes = filesize($pathfile);
                        $lastModified = date("Y-m-d H:i:s", filemtime($pathfile));
                        echo '<tr><td><a href="'.$pathfile.'">'.$file.'</a></td><td>'.humanFileSize($bytes).'</td><td>'.$lastModified.'</td></tr>';
                    }
                }
            }
        }
        closedir ($folder);
        echo '</table>';
        echo '</ul>';
    }

    clearstatcache();
    mkmap('.');
D'après ce que j'ai lu sur le net ça se fait avec sort() mais je m'en sors pas ...
Je veux bien un petit coup de pouce svp, je commence à |*() ...

Re: index.php / trie par ordre alphabétique des liens

Posté : 13 mai 2019, 08:22
par Spols
Tu as 2 solutions

la première est de stocké les nom de fichier dans une variable, de la trier et après de gérer l'affichage en tableau

l'autre solution est d'utiliser glob plutot que readdir selon la doc, le comportement par défaut est de retourné les fichier par ordre alphabétique
https://www.php.net/manual/fr/function.glob.php

Re: index.php / trie par ordre alphabétique des liens

Posté : 13 mai 2019, 12:06
par GeGaX
Bonjour Spols,
Merci pour les réponses.
J'ai étudié plutôt la seconde solution (glop) et j'ai bien lu la doc ainsi que fait quelques recherches sur le net.

Je sais pas si j'ai le droit de citer un autre site ... (la modération supprimera le lien si ce n'est pas le cas) mais j'ai trouvé ceci.

Il y a manifestement plusieurs méthodes pour y arriver mais il semblerait que je dois modifier beaucoup de choses pour arriver à ce que je souhaite.
Je ne suis pas un pro du php ... pourrais tu m'indiquer laquelle, selon toi, te semble la plus appropriée ?

Mon but est de modifier le moins possible l'existant (je veux le beurre et l'argent du beurre ...)
J'ai fais plusieurs tests mais je me retrouve systématiquement avec des erreurs de paramètres ... j'ai du mal à capter pourquoi et il semblerait que je doit aussi modifier ma boucle while par foreach ...

Merci

Re: index.php / trie par ordre alphabétique des liens

Posté : 13 mai 2019, 14:31
par Spols
voici un code avec pas mal de correction mais je ne sais pas si c'est ce que tu voulais comme structure de retour
j'ai commenté pas mal de ligne inutile ou modifié mais il y a aussi des modifications pour correspondre avec mon environnement
function mkmap($dir) {
        // $folder = opendir ($dir);
        // echo '<ul class="'.$dir.'">';
        echo '<table border="1" class="'.$dir.'">';
        echo '<tr><th>Race</th><th>Size</th><th>Last modified</th></tr>';
        //while ($file = readdir ($folder)) {
		foreach (glob($dir, GLOB_NOESCAPE) as $file) {
            if ($file != "." && $file != "..") {
                // $pathfile = $dir.'/'.$file;
                //if (filetype($pathfile) == 'dir') {
				if (is_dir($file)) {
                        $lastModified = date("Y-m-d H:i:s", filemtime($file));
					echo '<tr><td><a href="'.$file.'">'.basename($file).'</a></td><td>FOLDER</td><td>'.$lastModified.'</td></tr>';
                    echo '<tr><td colspan="3">';mkmap($file.'/*');echo '</td></tr>';
                } else {
                    if (true || strpos($file, '.js') !== false) {
                        $bytes = filesize($file);
                        $lastModified = date("Y-m-d H:i:s", filemtime($file));
                        echo '<tr><td><a href="'.$file.'">'.basename($file).'</a></td><td>'.humanFileSize($bytes).'</td><td>'.$lastModified.'</td></tr>';
                    }
                }
            }
        }
        // closedir ($folder);
        echo '</table>';
        // echo '</ul>';
    }

    clearstatcache();
    // mkmap('.');
	mkmap('*');

Re: index.php / trie par ordre alphabétique des liens

Posté : 13 mai 2019, 16:31
par GeGaX
Merci Spols :wink: ,
Je vais commencer par essayer de le comprendre puis le modifier et enfin le tester.
Je te tiens au courant.
Merci encore.