Visualizzazione dei risultati da 1 a 4 su 4

Discussione: ordinare un array ??

  1. #1

    ordinare un array ??

    Salve ragazzi visto che non mi rispondete al mio post precedente ne ho fatto un altro. Il mio problema è il seguente, devo scandire una directory ed elencare tutti i file (immagini) e memorizzarli all'interno di un array, effettuare un ordinamento per data di scrittura decrescente, così al primo posto dell'array ho l'immagine appena scaricata sul server. Visto che non so se si può fare con gli array multidimensionali, mi è venuta l'idea di provare con questi altri array monodimensionali. Vi spiego l'esempio:
    Ho simulato la memorizzazione dei tempi di scrittura del file sul disco in effetti questo non è altro che un
    Codice PHP:
     time(); 
    a cui il file prende il nome con la sua estensione, quindi nel mio array avro dei numer.estensione. Quello che ho cercato di fare è di memorizzare tali nomi in un array e di ordinarli numericamente ed in senso decrescente così da avere il nome del file più recente in testa all'array, però non mi funziona adesso vi posto il codice.!!!!
    Aiutoooooo!!!!

    Codice PHP:
    $numeri=array("11100","11101","12000","13000","14000","1","7","10");

    $nomeimg=array();

    for (
    $i=0;$i<count($numeri);$i++){

    $nomeimg[$i]=$numeri[$i]."."."jpg";
    }

    for (
    $i=0;$i<count($numeri);$i++){

    echo 
    "Indice=".$i."
    Nome Immagine="
    .$nomeimg[$i]."

    "
    ;
    }

    sort($nomeimg,SORT_NUMERIC);
    echo 
    "Stampa array ordinato numericamente crescente!!
    "
    ;
    for (
    $i=0;$i<count($numeri);$i++){

    echo 
    "Indice=".$i."
    Nome Immagine="
    .$nomeimg[$i]."

    "
    ;
    }





    arsort($nomeimg,SORT_NUMERIC);
    //array_reverse($nomeimg,TRUE);
    echo "Stampa array ordinato numericamente decrescente!!
    "
    ;
    for (
    $i=0;$i<count($numeri);$i++){

    echo 
    "Indice=".$i."
    Nome Immagine="
    .$nomeimg[$i]."

    "
    ;

    Roberto Dungino

  2. #2
    Visto che é una stringa che é in parte numero prova a usare natsort() invece di sort()

  3. #3
    ciao, spero che tu non ti offenda, ma visto che avevo già del codice pronto, ti posto quello:
    Codice PHP:

    $directory
    ="img/";
    // è necessario mettere il nome nella variabile $directory,
    // altrimenti CompareTime non funziona

    $listafile=is_photo($directory);
    // $listafile è ordinato dall'ultima immagine aggiunta
    // alla più vecchia, per il contrario, o fai il reverse
    // oppure scambi 1 e -1 nella funzione CompareTime

    if(!$listafile) {echo "La directory non contiene immagini";}
    else {
    print_r ($listafile);}


    function 
    is_photo($dir){
        
    $ar_tmp=scan_dir($dir);
        foreach(
    $ar_tmp as $value){
        if(
    preg_match("/(\.gif|\.jpg|\.png)$/"$value)){$ar_tmps[]=$value;}
                                  }    
        unset(
    $ar_tmp);    
        if (!isset(
    $ar_tmps) || (count($ar_tmps)==0)){return FALSE;}
        
    usort($ar_tmps'CompareMTime');    
        return 
    $ar_tmps;}

    function 
    scan_dir($dir){
        
    $dh  opendir($dir);
        while (
    false !== ($filename readdir($dh))) {
        
    $array[] = $filename;}
        
    $array=array_slice($array,2);
        
    sort($array);
        
    closedir($dh);
        
    clearstatcache();
        unset(
    $filename);
        return 
    $array;}
        
    function 
    CompareMTime($strFilePath1$strFilePath2) {
    global 
    $directory;
      if ( !
    strcmp($strFilePath1$strFilePath2) ) return 0;
      return
        ( 
    filemtime($directory.$strFilePath1) < filemtime($directory.$strFilePath2)) ? : -1

    Spero che ti possano servire...

  4. #4
    funziona grazie tante!!!!
    Roberto Dungino

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.