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

    Ordinare array multidimensionale

    Ciao a tutti!

    Ho il seguente array multidimensionale:

    $array[0]['allievo'] = "Rossi";
    $array[0]['voto'] = 5;
    $array[1]['allievo'] = "Bianchi";
    $array[1]['voto'] = 7;
    $array[2]['allievo'] = "Verdi";
    $array[2]['voto'] = 9;

    A questo punto vorrei poter ordinare l'array in base al campo allievo. Ottenendo:
    $array[0]['allievo'] = "Bianchi";
    $array[0]['voto'] = 7;
    $array[1]['allievo'] = "Rossi";
    $array[1]['voto'] = 5;
    $array[2]['allievo'] = "Verdi";
    $array[2]['voto'] = 9;

    E, successivamente, anche in base al campo voto:
    $array[0]['allievo'] = "Verdi";
    $array[0]['voto'] = 9;
    $array[1]['allievo'] = "Bianchi";
    $array[1]['voto'] = 7;
    $array[2]['allievo'] = "Rossi";
    $array[2]['voto'] = 5;

    Ho letto un sacco di articoli al riguardo ma non ho ancora capito qual è la via migliore per ottenere tale risultato. Qualcuno può aiutarmi?

    Grazie dell'attenzione!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    non mi sembra cosi complicato :P

    sort(); -> ordine crescente
    rsort(); -> ordine decrescente
    shuffle(); -> ordine casuale

    http://it.php.net/manual/it/function.sort.php

    Usa queste funzioni per ordinare i tui dati negli array ^^ ovviamente dovrai fare un ciclo :P

  3. #3
    Ciao e grazie della risposta.

    Quello che a me sfugge è come fare ad indicare la chiave dell'ordinamento (cioè se è rispetto ad 'allievo' o 'voto'). Se è così facile potresti postare un esempio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    Codice PHP:
    <?php
    function msort($array$id="id"$sort_ascending=true) {
            
    $temp_array = array();
            while(
    count($array)>0) {
                
    $lowest_id 0;
                
    $index=0;
                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);
                    }
        }
    ?>

    <?php

    //oh no, this is not in the ordered by id!!
    $data[] = array("item"=>"item 1""id"=>1);
    $data[] = array("item"=>"item 3""id"=>3);
    $data[] = array("item"=>"item 2""id"=>2);

    var_dump(  msort($data"id"false)  ); //just msort it...greatest to smallest

    var_dump(  msort($data"id")  ); //just msort it...smallest to greatest

    /* outputs

    array
      0 =>
        array
          'item' => 'item 3' (length=6)
          'id' => 3
      1 =>
        array
          'item' => 'item 2' (length=6)
          'id' => 2
      2 =>
        array
          'item' => 'item 1' (length=6)
          'id' => 1

    array
      0 =>
        array
          'item' => 'item 1' (length=6)
          'id' => 1
      1 =>
        array
          'item' => 'item 2' (length=6)
          'id' => 2
      2 =>
        array
          'item' => 'item 3' (length=6)
          'id' => 3

    */
    ?>
    basta che invece di id scrivi alunno o voto dovrebbe funzionare ^^

  5. #5
    Riciao!

    Ora sono riuscito a farla funzionare. Grazie!
    E se volessi inserire una seconda chiave di ordinamento?

    Immaginando di avere più campi (alunno, voto, prof. class)
    potrei voler ordinare l'array prima rispetto a voto e poi in ordine alfabetico.

    E' possibile?

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.