Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Ordinare i dati

  1. #1

    Ordinare i dati

    Salve, avrei bisogno di ordinare un array secondo delle chiavi specifiche, in maniera non case sentive (che non faccia distinzione tra maiuscole e minuscole)

    Questa funzione ordina i dati esattamente come mi serve, ma non è case sentive.. come la posso modificare?

    Codice PHP:
    function vsort($array$id='id'$sort_ascending=true$is_object_array false) {
        
    $temp_array = array();
        while(
    count($array)>0) {
            
    $lowest_id 0;
            
    $index 0;
            if(
    $is_object_array){
                foreach (
    $array as $item) {
                    if (isset(
    $item->$id)) {
                        if (
    $array[$lowest_id]->$id) {
                            if (
    $item->$id<$array[$lowest_id]->$id) {
                                
    $lowest_id $index;
                            }
                        }
                    }
                    
    $index++;
                }
            } else {
                foreach (
    $array as $item) {
                    if (isset(
    $item[$id])) {
                        if (
    $array[$lowest_id][$id]) {
                            if (
    $item[$id]<$array[$lowest_id][$id]) {
                                
    $lowest_id $index;
                            }
                        }
                    }
                    
    $index++;
                }             
            }
            
    $temp_array[] = $array[$lowest_id];
            
    $array array_merge(array_slice($array0,$lowest_id), array_slice($array$lowest_id+1));
        }
        if (
    $sort_ascending) {
            return 
    $temp_array;
        } else {
            return 
    array_reverse($temp_array);
        }

    grazie. Se qualcuno ha una funzione migliore è il benvenuto.. io uso questa xke altro non ho trovato
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  2. #2
    Perchè non posti un array di oggetti "disordinato" ed uno "ordinato"? Magari si può risolvere più facilmente tramite altre funzioni di ordinamento.

    Per favore utilizza http://www.phpnet/var_export per ottenere una stampa delle due versioni degli array.

  3. #3
    Ecco un array non ordinato

    Codice PHP:
      0 => 
      array (
        
    'id' => '174',
        
    'name' => 'Abaco',
        
    'desc' => '',
      ),
      
    => 
      array (
        
    'id' => '21',
        
    'name' => 'Cattedrale',
        
    'desc' => '',
      ),
      
    => 
      array (
        
    'id' => '201',
        
    'name' => 'bancone',
        
    'desc' => '',
      ) 
    invece dovrebbe essere
    Codice PHP:
      0 => 
      array (
        
    'id' => '174',
        
    'name' => 'Abaco',
        
    'desc' => '',
      ),
      
    => 
      array (
        
    'id' => '201',
        
    'name' => 'bancone',
        
    'desc' => '',
      ),
      
    => 
      array (
        
    'id' => '21',
        
    'name' => 'Cattedrale',
        
    'desc' => '',
      ) 
    Praticamente l'array deve essere ordinato per 'name' ed in ordine come segue : prima i numeri, poi le lettere ma non tenendo da conto delle maiuscole e minuscole.

    Lo script postato sopra funziona correttamente salvo che non ci siano maiuscole o minuscole perchè è case sensitive e perciò da priorità alle maiuscole ordinandole per prima delle lettere minuscole
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  4. #4
    Perchè complicarsi la vita?

    Codice PHP:
    <?php 

    $array 
    = array(=>
      array (
        
    'id' => '174',
        
    'name' => 'Abaco',
        
    'desc' => '',
      ),
      
    =>
      array (
        
    'id' => '21',
        
    'name' => 'Cattedrale',
        
    'desc' => '',
      ),
      
    =>
      array (
        
    'id' => '201',
        
    'name' => 'bancone',
        
    'desc' => '',
      ),
      
    =>
      array (
        
    'id' => '201',
        
    'name' => '123',
        
    'desc' => '',
      )
      );

    function 
    mysort($a$b) {
        return 
    strcasecmp($a['name'], $b['name']);
    }

    usort($array'mysort');

    var_dump($array);

    ?>

  5. #5
    Grazie 1000 sei sempre gentile e disponibile.. funziona, ma me la potresti spiegare? xke non capisco come mai se alla funzione $a e $b non vengono passati funziona comunque.
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    434
    Da php.net:

    usort - Ordina un array mediante una funzione definita dall'utente

    bool usort ( array $&array , callback $cmp_function )

    Ordina i valori di un array mediante una funzione di comparazione definita dall'utente. Se si vuole ordinare un array con dei criteri non usuali, si deve usare questa funzione.

    La funzione di comparazione deve restituire un intero minore, uguale o superiore a zero se il primo elemento è da considerarsi rispettivamente minore, uguale o maggiore del secondo.
    In pratica il secondo argomento passato a usort è il nome usato dalla funzione per ordinare. La funzione deve avere due argomenti $a e $b e può restituire 3 valori:
    -1 l'oggetto $b va prima di $a
    0 sono uguali, $b va immediatamente dopo $a
    1 $a va dopo $b

    E la funzione strcasecmp fa esattamente ciò gestendo correttamente i dati binari ed è case-insensitive.

  7. #7
    vi ringrazio tutti e due.
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

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.