• User

    Ordinare array di array

    Salve a tutti!

    Avrei bisogno di un consiglio tecnico...
    vorrei ordinare un array composto da vari campi:

    
    **array** *(size=12)*
          0 =>         **object**(*stdClass*)*4*]          *public* 'idcat' => int 8          *public* 'dscLng' => string '' *(length=0)*          *public* 'ordVis' => int 10      1 =>         **object**(*stdClass*)*5*]          *public* 'idcat' => int 19          *public* 'dscLng' => string '' *(length=0)*          *public* 'ordVis' => int 30      2 =>         **object**(*stdClass*)*6*]          *public* 'idcat' => int 20          *public* 'dscLng' => string '' *(length=0)*          *public* 'ordVis' => int 40           
    ```vorrei appunto ordinare tale array per 'ordVis' prima di utilizzarlo in un foreach!Grazie in anticipo :)

  • Moderatore

    Ciao anu,
    postresti cercare un algoritmo di ordinamento (merge sort o quicksort, ad esempio) ed implementarlo a dovere nel tuo codice. 😉


  • User Attivo

    Prova in questo modo (N.B. $array è l'array che vuoi ordinare):
    [PHP]
    $chiavi = array ();
    foreach ( $array as $key=>$value ) {
    $chiavi [$key] = $value['ordVis'];
    }
    array_multisort ( $chiavi, SORT_ASC, $array );
    print_r ( $array );[/PHP]


  • Super User

    Hai bisogno di usort.
    Nel tuo esempio sono già ordinati comunque questo funziona

    [PHP]
    $a = array(
    array(8,'',10),
    array(19,'',30),
    array(20,'',40)
    );

    function cmp($a, $b){
    if($a[2] == $b[2])
    return false;
    return ($a[2] < $b[2]) ? -1 : 1;
    }

    usort($a,"cmp");

    print_r($a);
    [/PHP]


  • User

    Grazie infinite,
    siete stati molto chiari e precisi!

    A buon rendere 😄


  • User

    Grazie a tutti per le risposte,
    quello che cercavo tuttavia era questo:

    
    
    <?php 
        $test = array(); 
        $test[0]['name'] = 'zoe'; 
        $test[0]['email'] = '[email protected]'; 
        $test[0]['phone'] = '123-123-1234'; 
        $test[0]['trick'] = 'mezopia'; 
    
    
        $test[1]['name'] = 'Amanda'; 
        $test[1]['email'] = '[email protected]'; 
        $test[1]['phone'] = '123-123-1235'; 
        $test[1]['trick'] = 'youarecool'; 
    
    
        $test[2]['name'] = 'john'; 
        $test[2]['email'] = '[email protected]'; 
        $test[2]['phone'] = '123-123-3333'; 
        $test[2]['trick'] = 'goneinanhour'; 
    
    
        print_r(columnSort($test, 'name')); 
    
    
        function columnSort($unsorted, $column) { 
            $sorted = $unsorted; 
            for ($i=0; $i < sizeof($sorted)-1; $i++) { 
              for ($j=0; $j<sizeof($sorted)-1-$i; $j++) 
                if ($sorted[$j][$column] > $sorted[$j+1][$column]) { 
                  $tmp = $sorted[$j]; 
                  $sorted[$j] = $sorted[$j+1]; 
                  $sorted[$j+1] = $tmp; 
              } 
            } 
            return $sorted; 
        } 
        ?>
    
    
    

    trovato su php.net

    Spero possa servire ad altri!