Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema con usort per valori simili

    Buongiorno a tutti,
    non riesco a venirne a capo con questo problema di ordinamento elementi array.

    In pratica se i valori di 'number' sono uguali non mi mantiene l'ordine originale, ma me lo inverte, infatti il seguento codice:

    Codice PHP:
    function cmp($a$b){    
       if (
    $a['number'] == $b['number']) {        
          return 
    0;    
       }    
       return (
    $a['number'] < $b['number']) ? -1;
    }

    $a = array(     
       array( 
    'label' => 'ciccio''number' => 5),    
       array( 
    'label' => 'pippo''number' => 2),    
       array( 
    'label' => 'poldo''number' => 5),    
       array( 
    'label' => 'carlo''number' => 1),    
       array( 
    'label' => 'nunzio''number' => 5),    
    );
    usort$a"cmp" );

    echo 
    '<pre>';
    print_r($a);
    echo 
    '</pre>'
    mi restituisce questo

    [0] => Array
    (
    [label] => carlo
    [number] => 1
    )


    [1] => Array
    (
    [label] => pippo
    [number] => 2
    )


    [2] => Array
    (
    [label] => nunzio
    [number] => 5
    )


    [3] => Array
    (
    [label] => poldo
    [number] => 5
    )


    [4] => Array
    (
    [label] => ciccio
    [number] => 5
    )



    grazie mille a tutti per la pazienza!
    Ultima modifica di zoc; 20-02-2015 a 16:14

  2. #2
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Ciao Santino e grazie per la risposta,
    ma uasort mi restituisce lo stesso risultato di usort!
    ovvero mi lascia "ciccio" in ultima posizione.

  4. #4
    uasort dovrebbe mantenere l'associazione con l'indice, solo che non essendo definito un indice esplicitamente magari il risultato è lo stesso, mai fatta una prova. la mia curiosità è "che te frega che ciccio sia in ultima posizione e non penultima" ? Nel senso, dal punto di vista dell'ordinamento è corretto, il perchè invere ciccio e l'altro tizio è da ricercare nell'algoritmo di ordinamento implementato. Se ciccio deve stare avanti all'altro, vorrà dire che non solo devi guardare il valore di "number" ma qualcosa di altro. Che ne so, ordine alfabetico a parità di numero?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Per me è fondamentale che rispettino quel ordine.
    Number mi serve per suddividerli in blocchi, all'interno dei quali, però, devono mantere appunto l'ordine di pubblicazione.

    Ho provato anche a creare l'array così

    Codice PHP:
    $a[0] = array( 'label' => 'ciccio''number' => 5);
    $a[1] = array( 'label' => 'pippo''number' => 2);
    $a[2] = array( 'label' => 'poldo''number' => 5);
    $a[3] = array( 'label' => 'carlo''number' => 1);
    $a[4] = array( 'label' => 'nunzio''number' => 5); 
    ma nulla è cambiato

  6. #6
    Codice PHP:

    $raggruppato 
    = array();

    $a = array(     
       array( 
    'label' => 'ciccio''number' => 5),    
       array( 
    'label' => 'pippo''number' => 2),    
       array( 
    'label' => 'poldo''number' => 5),    
       array( 
    'label' => 'carlo''number' => 1),    
       array( 
    'label' => 'nunzio''number' => 5),    
    );

    foreach(
    $a as $element)
    {
         if(!
    array_key_exists($element['number'],$raggruppato)
         {
            
    $raggruppato[$element['number']] = array();
         }

         
    $raggruppato[$element['number']][] = $element;

    }

    ksort($raggruppato);
    print_r($raggruppato); 
    prova na cosa simile
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Santino sei un grande!
    Non avevo pensato all'idea di mettere il numbver come key.
    Ora in recupero dati è ancora più ordinato!

    grazie mille!

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.