Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: ordinare un array

  1. #1

    ordinare un array

    Ho una funzione che fa questo: apre una directory, lista i file e li memorizza in un array:

    Codice PHP:
    # I file di questa dir sono nominati, cosi`:
    # prefisso_yyyy-mm-dd.txt
    $i=0;
    $dh opendir(".");
    while((
    $record readdir($dh)) !== false){ 

        
    $check explode("."$record);
        if(
    $check[1] != "txt") continue;

        
    $i+=1;
        
        
    $mysize filesize($record);
        
    $mysize round(($mysize/1024/1024),0);
        
    $mydata explode("_",$record);
        
    $mydata explode(".",$mydata[1]);
        
    $mydata explode("-",$mydata[0]);
        
    $yy $mydata[0];
        
    $mm $mydata[1];
        
    $dd $mydata[2];
        
    $mydata $dd."/".$mm."/".$yy;
        
        
    $MYFILE[$i] = array($i$mydata$mysize$record);


    Ora, quando stampo l'array questo e' ordinato in un modo buffo, cioè non e' in ordine alfabetico... l'ordine in cui mi aspetto venga letta la directory. C'e' un modo per dire alla funzione di leggere i file in ordine alfabetico, o di forzare successivamente la cosa, ovvero stamparlo in ordine alfabetico secondo la chiave "$record"?
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  2. #2
    potresti memorizzare l'array in maniera differente:

    $MYFILE[$record] = array($i, $mydata, $mysize);

    e poi usare un ksort($MYFILE);


  3. #3
    Ho costruito l'array come

    Codice PHP:
    $ordina date("U",mktime(0,0,0,$mm,$dd,$yy));
    $MYFILE[$ordina] = array(...);

    # e poi

    ksort($ordina); 
    ok adesso li mostra in ordine crescente, ma se faccio

    arsort($MYFILE);

    oppure

    rsort($MYFILE);

    per metterlo in ordine descrescente, fa riferimento all'array orginale e non al ksort. Ho provato anche:

    $qq = array(ksort($MYFILE);

    print_r($qq);

    ma niente...
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  4. #4

  5. #5
    Due cose: tu stai usando un array di array: non te lo consiglio, visto che tutte le funzioni di PHP per gli array non funzionano su array i cui elementi sono a loro volta degli array; prova usando un array per il nome del file, un'altro per la dimensione, eccetera, o meglio ancora usa un array per la dimensione con chiavi i nomi file, un'altro per la data con chiavi i nomi file e così via, così puoi ordinarli per chiave e sei a posto.

    Secondo, l'ordine in cui li vedi è quello naturale della directory, ovvero quello in cui le voci di directory sono salvate sul disco, che deriva sia dalla sequenza temporale di creazione che dal fatto che certi file siano stati eliminati nel tempo:

    Creo tre file uno dopo l'altro, dir:

    file1
    file2
    file3

    Elimino file2:

    file1
    -
    file3

    Creo file4:

    file1
    file4
    file3

    Tutto chiaro?
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  6. #6
    Originariamente inviato da Gianni_T
    krsort

    No, comunque non riesce ad ordinare un array di array, nessuna delle funzioni di PHP lo fa.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  7. #7
    Originariamente inviato da Gianni_T
    krsort

    Ottimo!
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  8. #8
    Originariamente inviato da Shores
    No, comunque non riesce ad ordinare un array di array, nessuna delle funzioni di PHP lo fa.
    con le funzioni di ordinamento per chiave puoi ordinare anche un array multidimensionale, ovviamente solo per chiave...

    poi ci sono la funzione array_multisort per ordinare array multipli o multidimensionali


  9. #9
    Originariamente inviato da Mutato
    Ottimo!
    Occhio. Non funzionerà.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  10. #10
    Originariamente inviato da Gianni_T
    con le funzioni di ordinamento per chiave puoi ordinare anche un array multidimensionale, ovviamente solo per chiave...

    poi ci sono la funzione array_multisort per ordinare array multipli o multidimensionali

    Appunto: un array multidimensionale, NON un array i cui elementi sono array, che è un array DI array, o anche array ricorsivo.

    NON sono affatto la stessa cosa.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.