Visualizzazione risultati 1 fino 5 di 5

Discussione: Leggere Directory da una posizione e stampare in ordine crescente

  1. #1
    masseriadilot non è connesso Neofita
    Data registrazione
    13-05-2015
    Messaggi
    2

    Predefinito Leggere Directory da una posizione e stampare in ordine crescente

    Salve a tutti, ho fatto uno script che stampa le folder presenti in una posizione del mio sito, però sto faticando, un po' per vecchiaia un po' per incapacità, ad ordinare la stampa di quei file, in modo tale che appaiano in colonne da 50 elementi ciascuna.

    Qualcuno può aiutarmi?

    Codice PHP:

    foreach(glob('../db/*') as $filename){
    $idCartella = ereg_replace("../db/","", $filename);
    $id = ereg_replace("sch","", $idCartella);
    include(
    '../db/'."$idCartella".'/index.php');
    echo
    '<div style="float: left; padding: 4px;">
    <a href="/oggetto.php?id='
    .$id.'" target="_blank" style="color: #000;">'."
    $id. $oggetto".'</a> </div>';
    }
    Ultima modifica di masseriadilot : 24-07-2016 alle ore 18.31.12

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Nella documentazione di PHP c'è un esempio per la lettura dei file all'interno di una cartella. Se sei interessato solo alle sotto-cartelle, puoi usare is_dir per "filtrare" i risultati.

    Per far sì che i nomi delle sotto-cartelle appaiano in colonne da 50 ciascuna, probabilmente ti conviene prima creare un vettore che contiene il nome (o percorso) di ciascuna sotto-cartella, leggerne la dimensione con count (sia n il numero di sotto-cartelle) e creare una tabella o altra impaginazione con n / 50 colonne, ad esempio:
    Codice PHP:
    $subdirs = ...; // Leggi le sotto-cartelle
    $n = count($subdirs);
    $ncols = ceil($n / 50);

    for (
    $i = 0; $i < $n; ++$i) {
    echo ...;
    // Stampa le informazioni di cui hai bisogno da $subdirs[$i]

    // crea una nuova riga ogni n / 50 colonne
    if (($i + 1) % $ncols == 0) {
    echo
    "<br />";
    }
    }
    Se vuoi ordinare i dati per colonne anziché per righe, devi intervenire sull'indice dell'oggetti che stampi.

    In ogni caso, essendo il numero di sotto-cartelle apparentemente illimitato a priori, il numero di colonne è altrettanto illimitato. In termini concreti, ogni 50 sotto-cartelle hai una colonna in più, man mano che la quantità di sotto-cartelle aumenta, aumenta anche la "larghezza" della tabella/griglia che stampi. Questo potrebbe portare ad avere una griglia più larga dello schermo, o a forzare dei ritorni a capo, a seconda dell'impaginazione.

    Non capisco l'uso dell'include: forse oltre al nome della sotto-cartella hai bisogno di mostrare il contenuto di un eventuale index.php in essa contenuto?

  3. #3
    masseriadilot non è connesso Neofita
    Data registrazione
    13-05-2015
    Messaggi
    2

    Predefinito

    Cerco di spiegarti ... io ho una cartella.
    All'interno di questa ci sono altre cartelle.

    Io devo stampare SOLO le cartelle contenute all'interno della prima directory, niente subDirectory o altro.
    L'unica mia problematica è, dato il mio script di stampa delle folder, come faccio a mettere in ordine, anche fosse
    solo alfabetico/numerico le cartelle contenute ??

    ../mainFolder
    ./sch001
    ./sch002
    ./sch003
    ./sch004

    come faccio a metterli in ordine numerico ? sembra facile, ma mi restituice i numeri in questo ordine 1 10 100 101 102 ...

  4. #4
    Guest

    Predefinito

    Se i nomi sono nella forma

    Nome1
    Nome2
    ...
    Nome9
    Nome10
    ....

    La cosa è corretta poiché l'ordine è 1 10 11 12 ... 2 20 21...

    Se i file hanno nomi

    Nome001
    Nome002
    ...
    Nome009
    Nome010

    L'ordine dovrebbe essere corretto.

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Chiaro! Innanzitutto, giusto per chiarezza, quando nel messaggio precedente ho parlato di sotto-cartelle, intendevo quelle contenute nella tua mainFolder, ovvero le sch001, sch002, ... che intendi leggere.

    I numeri ti vengono restituiti in ordine alfabetico: la stringa "1" viene prima della stringa "10", e così via (anche se contro-intuitivo, questo è proprio l'ordine alfabetico).
    Per risolvere, dopo aver memorizzato i nomi delle cartelle in un vettore, puoi usare natsort per riordinarli in maniera "naturale", prima di stamparli.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •