Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Problema ordinamento array (x esperti)

    Vorrei ordinare un array multiplo, il problema è che l'array ha questo formato...

    codice:
    Array ( [0] => Array ( [id] => 5
                                  [nome] => nome_cognome_29-09-2008.txt )
              [1] => Array ( [id] => 12
                                  [nome] => nome_cognome_25-08-2008.txt )
             )
    come dovrei fare per ordinare gli array secondo la data??? :master:

  2. #2
    ed immagino che i nomi dei file non puoi cambiarli, giusto?

  3. #3
    Originariamente inviato da artorius
    ed immagino che i nomi dei file non puoi cambiarli, giusto?
    i nomi dei files vengono creati in automatico....perchè anche se li potessi cambiare cosa risolverei? :master:

  4. #4
    penso che artorius intenda che se usi una notazione tipo

    2008-09-29_cognome_nome.txt

    a quel punto ti basta ordinare le stringhe senza fare substring di data, giorno, mese ecc ecc.. dopodichè usi un classico sort.

    ciao
    Ondare, il mio blog!

  5. #5
    eggià, è il sistema classico per avere una lista ordinata per data quando fai un ls su di un X-Term

  6. #6
    Originariamente inviato da dav22
    penso che artorius intenda che se usi una notazione tipo

    2008-09-29_cognome_nome.txt

    a quel punto ti basta ordinare le stringhe senza fare substring di data, giorno, mese ecc ecc.. dopodichè usi un classico sort.

    ciao
    E se non potessi cambiare il nome?
    Vi spiego, per poterlo cambiare sono costretto a modificare una serie di script...in realtà ho reso più semplice l'array per farvi capire, ma in realtà il nome viene creato in automatico secondo 8 campi che l'utente riempie, ed i campi vengono creati dinamicamente a seconda di una scheda preimpostata...e lo script prevede moltissime schede, di cui sono costretto a controllarle tutte e spostare il campo data all'inizio...il che non so neanche se il cliente vorrebbe vedere la data come primo campo.

    In alternativa esisterebbe un modo, tipo smembrare il nome del file, individuare la data e poi ordinare l'array??? A dirlo è facile, ma nn saperei da dove iniziare :P

  7. #7
    e che ad avere anche solo la data davanti all'americana ti bastava fare array_multisort

    A questo punto devi implementarti un bel algoritmetto di sort a mano:

    Codice PHP:
    for($i =0$i count($array) - 1$i++)
    {
        for(
    $j 0$j $i$j++)
        {
           
    $valI//Ottieni il valore dell'indice i;
           
    $valJ//Ottieni il valore dell'indice j;
           /*
           Qui tagli i valori, estrai la data e la converti in un timestamp
          */
           
    $tsI//la data da $valI
           
    $tsJ//la data da $valJ
           
    if($tsJ $tsI)
           {
              
    $tmp $array[$i];
              
    $array[$i] = $array[$j];
              
    $array[$j]  =$tmp;
           }
        }

    Se non ho cannato qualcosa, alla fine del ciclo di i l'array dovrebbe essere ordinato

  8. #8
    Originariamente inviato da artorius
    e che ad avere anche solo la data davanti all'americana ti bastava fare array_multisort

    A questo punto devi implementarti un bel algoritmetto di sort a mano:

    Codice PHP:
    for($i =0$i count($array) - 1$i++)
    {
        for(
    $j 0$j $i$j++)
        {
           
    $valI//Ottieni il valore dell'indice i;
           
    $valJ//Ottieni il valore dell'indice j;
           /*
           Qui tagli i valori, estrai la data e la converti in un timestamp
          */
           
    $tsI//la data da $valI
           
    $tsJ//la data da $valJ
           
    if($tsJ $tsI)
           {
              
    $tmp $array[$i];
              
    $array[$i] = $array[$j];
              
    $array[$j]  =$tmp;
           }
        }

    Se non ho cannato qualcosa, alla fine del ciclo di i l'array dovrebbe essere ordinato
    Non ho capito i valori $valI; $valJ; a cosa devono essere uguali? al nome del file? :master:

  9. #9

  10. #10
    Ciao artorius...
    ho fatto esattamente come mi hai detto ma mi sa che alla fine c'è qualche errore perchè nn lo ordina....lo script è diventato questo...

    Codice PHP:
    //ordina l'array
                        
    for($i =0$i count($risultato) - 1$i++)
              {
                  
    $valI $risultato[$i]['nomefile']; //nome del file
                                
    $valI str_replace(substr($valIstrrpos($valI".")), ''$valI); //rimuovo l'estensione
                                
    $arraytmp = array();
                                
    $arraytmp explode('_',$valI); //smembro il nome del file
                                
    for ($t=0$t count($arraytmp); $t++){
                                        if (
    preg_match('/^\d{1,2}-\d{1,2}-\d{4}$/'$arraytmp[$t])) { //cerco la data
                        
    $dataI $arraytmp[$t]; //associo la data alla variabile
                      
    }
                                }
                                list(
    $gg$mm$yy) = split('-'$dataI);
                                
    $dataI mktime('00''00''00'$mm$gg$yy); //converto la data in timestamp
                                
    for($j 0$j count($risultato); $j++)
                  {                                            
                                    
                      
    $valJ $risultato[$j]['nomefile']; //nome del file
                                    
    $valJ str_replace(substr($valJstrrpos($valJ".")), ''$valJ); //rimuovo l'estensione
                                    
    $arraytmp = array();
                                    
    $arraytmp explode('_',$valJ); //smembro il nome del file
                                    
    for ($t=0$t count($arraytmp); $t++){
                                            if (
    preg_match('/^\d{1,2}-\d{1,2}-\d{4}$/'$arraytmp[$t])) { //cerco la data
                            
    $dataJ $arraytmp[$t]; //associo la data alla variabile
                          
    }
                                    }
                                        list(
    $gg$mm$yy) = split('-'$dataJ);
                                        
    $dataJ mktime('00''00''00'$mm$gg$yy); //converto la data in timestamp
                     
                                     
    if($dataJ $dataI)
                     {
                        
    $tmp = array();
                                            
    $tmp[0] = $risultato[$i];
                        
    $risultato[$i] = $risultato[$j];
                        
    $risultato[$j]  =$tmp[0];
                     }
                  }
              } 
    il risultato che mi da è questo...

    PRIMA DI ORDINARE
    codice:
    (
        [0] => Array
            (
                [id] => 11
                [nomefile] => yytry_rtytry_tyrtyrty_566464_30-09-2008_tet.log
                [idsocieta] => 2
                [idcommessa] => 1
                [idsettore] => 1
                [iddocumento] => 14
                [iddescrizionefile] => 11
            )
    
        [1] => Array
            (
                [id] => 10
                [nomefile] => fsefsdf_dfsdf_fsdfsd_33422_10-09-2008_ub.log
                [idsocieta] => 2
                [idcommessa] => 1
                [idsettore] => 1
                [iddocumento] => 14
                [iddescrizionefile] => 10
            )
    
        [2] => Array
            (
                [id] => 9
                [nomefile] => obb_Oggetto_Notaio_Repertorio_Raccolta_17-09-2008.txt
                [idsocieta] => 2
                [idcommessa] => 1
                [idsettore] => 1
                [iddocumento] => 25
                [iddescrizionefile] => 9
            )
    
        [3] => Array
            (
                [id] => 8
                [nomefile] => committente_appaltatore_oggetto_4651213_17-09-2008.txt
                [idsocieta] => 2
                [idcommessa] => 1
                [idsettore] => 1
                [iddocumento] => 14
                [iddescrizionefile] => 8
            )
    
    )
    DOPO L'ORDINAMENTO

    codice:
    (
        [0] => Array
            (
                [id] => 10
                [nomefile] => fsefsdf_dfsdf_fsdfsd_33422_10-09-2008_ub.log
            )
    
        [1] => Array
            (
                [id] => 9
                [nomefile] => obb_Oggetto_Notaio_Repertorio_Raccolta_17-09-2008.txt
            )
    
        [2] => Array
            (
                [id] => 11
                [nomefile] => yytry_rtytry_tyrtyrty_566464_30-09-2008_tet.log
            )
    
        [3] => Array
            (
                [id] => 8
                [nomefile] => committente_appaltatore_oggetto_4651213_17-09-2008.txt
            )
    
    )

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 © 2026 vBulletin Solutions, Inc. All rights reserved.