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

Eléphant du PHP | 50 Messages

13 mai 2019, 00:33

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 à |*() ...

Mammouth du PHP | 1967 Messages

13 mai 2019, 08:22

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 50 Messages

13 mai 2019, 12:06

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

Mammouth du PHP | 1967 Messages

13 mai 2019, 14:31

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('*');
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 50 Messages

13 mai 2019, 16:31

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.