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

    ordinare array multidimensionale

    ciao a tutti,
    per il solito progetto di prenotazioni alberghiere, in fase di verifica di disponibilità di camere ricavo man mano una serie di informazioni (se utili) per poi mostrare il tutto al potenziale cliente. Le informazioni che ricavo man mano dal database vengono quindi salvati in un array per una successiva rielaborazione e quindi per mostrare le info ai clienti ciclo su questo array che ha diverse livelli di dimensione. Un esempio potrebbe essere
    codice:
    Array
    (
        [$room_id] => Array
            (
                [min_total_available] => $min_total_available
                [prices] => Array
                    (
                        [0] => Array
                            (
                                [rate_id] => $rate_id
                                [price] => $price_value
                            )
                    )
                [best_price] => $best_price_value
                [best_rate] => $best_rate_id
                [max_occupancy] => Array
                    (
                        [adults] => $adults_max_occupancy
                        [children] => $children_max_occupancy
                    )
                [name] => $room_name
                [description] => $room_description
            )
    )

    dove ho messo $var sono, ovviamente, i dati che salvo in questo bell'array
    ora, arriva la domanda
    come potrei fare ad esempio se volessi ordinare secondo best_price tutte le stanze? io avevo pensato di utilizzare un algoritmo di bubble sort (che uso per altro per trovare il prezzo più basso man mano che tiro fuori i dati, giusto perchè è il più semplice), utilizzando un array di appoggio, voi avete qualcosa da suggerire? ho visto che ad esempio array_multisort() non fa il mio caso dato che ci potrebbero essere diversi livelli, giusto?

    mil gracias.

  2. #2
    In realtà anche a me sarebbe servita una funzione per ordinare array multidimensionali in base ad una chiave. Cercando su php.net, però, non sono riuscito a trovare una funzione che faccia al una cosa del genere. Le ho viste tutte ma nessuna opera su array multidimensionali. L'unica credo sia crearne una apposta. Io idee non ne ho! Se arrivi a qualcosa magari la posti così vedo come hai eventualmente fatto! bye!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3
    io stesso avevo questo problema e spulciando sul manuale ne avevo trovata una. Io ho usato questa http://it.php.net/manual/it/function...sort.php#61334 e mi è stata di grandissimo aiuto!



    Spero ti possa servire
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    E' semplice, basta usare usort e definire una funzione per l'ordinamento
    codice:
    usort($array,"confronto");
    function confronto($a,$b) {
      if ($a['best_price'] < $b['best_price']) return -1;
      else return 1;
    }

  5. #5
    Ci sono molissimi esempi! Questa funzione non l'avevo proprio vista! devo riconsiderare la mia affermazione di prima: ho visto QUASI tutte le funzioni! Grazie anche da parte mia! Ciao!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  6. #6
    Originariamente inviato da luca200
    E' semplice, basta usare usort e definire una funzione per l'ordinamento
    codice:
    usort($array,"confronto");
    function confronto($a,$b) {
      if ($a['best_price'] < $b['best_price']) return -1;
      else return 1;
    }
    questa è ottima! visto che ho scoperto qualcosa di nuovo stavo cercando di automatizzare la funzione in modo da passargli altri parametri che sono il nome del campo secondo cui ordinare e il tipo di ordinamento (ASC e DESC), ma non ci sono riuscito, qualcuno che ha voglia di spiegarmi come fare?



    @ microv: quella funzione l'ho trovata perché stavo cercando disperatamente anche io un qualcosa del genere e dopo aver perso mezza giornata a cercare di costruire qualcosa l'ho trovata...le ho provate quasi tutte quelle sul manuale, ma qulla era l'unica che sono riuscito a far funzionare a dovere
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Ho un dubbio.
    Verifica se ti funziona meglio usort o uasort, che funziona allo stesso modo ma tratta diversamente le chiavi. Forse con la prima ti perdi gli indici dopo l'ordinamento.

  8. #8
    In realtà era una curiosità che mi era venuta. Mi serviva per una cosa temporanea (dovevo leggere un csv per popolare un db). Siccome non era una cosa che avrei dovuto riutilizzare non mi ci sono messo più di tanto. Ho provato alcune funzioni, quelle che mi sembrava facessero al caso mio, ma non sono riuscito a farle funzionare come avrebbero dovuto. Ho risolto in altro modo ed ho lasciato perdere. Però la cosa mi sta incuriosendo!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  9. #9
    grazie mille, modifico leggermente la struttura dell'array (spostando il $room_id almeno non viene modificato accidentalmente)...poi vi faccio sapere

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.