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

    ordinare un array multidimensionale per valore chiave

    Ciao a tutti,

    sono un paio di giorni che cerco di capire come poter ordinare un'array del genere per valore numerico decrescente di una chiave

    l'array ha questa struttura:

    Codice PHP:
    Array ( [de0ac7b761e47e514600341b1f0f6532] => 
                                                Array ( 
                                                        [
    rowid] => de0ac7b761e47e514600341b1f0f6532 
                                                        
    [id] => xxx123 
                                                        
    [qty] => 
                                                        
    [name] => lettino abbonzante 1 
                                                        
    [options] => Array ( [sup_id] => A394FFAD-0134-463F-980E-2614F12A1FDA [sup_prod_id] => 95A2CDC0-5132-487B-B785-8CB5B5666D07 [shipPrice] => 20.00 
                                                        [
    price] => 2000.00 [subtotal] => 2000 
                                                      
    )
            [
    eda54220f2e8708c05800f648ba07491] => 
                                                Array ( 
                                                        [
    rowid] => eda54220f2e8708c05800f648ba07491 
                                                        
    [id] => xxx124 
                                                        
    [qty] => 
                                                        
    [name] => lettino abbronzante 2 
                                                        
    [options] => Array ( [sup_id] => A394FFAD-0134-463F-980E-2614F12A1FDA [sup_prod_id] => 4F6178A3-376D-4F00-9666-1B929AF0A9B2 [shipPrice] => 25.00 
                                                        [
    price] => 1200.00 
                                                        
    [subtotal] => 1200 
                                                       

            [
    be6f0e96afbaeda40aa1e8fe36efe333] => 
                                                Array ( 
                                                        [
    rowid] => be6f0e96afbaeda40aa1e8fe36efe333 
                                                        
    [id] => xxx125 
                                                        
    [qty] => 
                                                        
    [name] => lettino abbronzante 3 
                                                        
    [options] => Array ( [sup_id] => A394FFAD-0134-463F-980E-2614F12A1FDA [sup_prod_id] => 95CA6254-68B2-4739-BBE2-916B6FB7B37B [shipPrice] => 50.00 
                                                        [
    price] => 1200.00 
                                                        
    [subtotal] => 1200 
                                                       ) 
    e la mia intenzione è quella di ordinarla per per prezzo di spedizione [shipPrice] decrescente.

    come potrei fare?


  2. #2
    Non l'ho testato perche' non ho voglia di riformattarmi quell'array, pero' prova con:

    Codice PHP:
    function price_sort($a$b) {
        
    $price_a $a['options']['shipPrice'];
        
    $price_b $b['options']['shipPrice'];
        if ( 
    $a == $b )
            return 
    0;
        return (
    $a $b) ? : -1;
    }

    usort($array'price_sort'); 

  3. #3
    puoi controllare direttamente sul manuale php,
    questo esempio riguarda proprio array multidimensionali

    http://it.php.net/manual/en/function.asort.php#90425

    nota
    ho visto cmq che la chiave della dimensione 1 è riportata come item nella dim 2

    suggerimento
    non so come popoli l'array di solito l'ordinamento si fa direttamene in sql.

    un'alternativa è quello di "tagliare" l'array con slice e ordinare il risultato.

    ciao.
    A partial count of the software available in just one noncommercial Linux system shows that it would have cost about $1.9 billion to develop the same software the way Microsoft does it.

  4. #4
    sembrerebbe non sunzionare

    sto inserendo la funzione price_sort dentro a un metodo di una classe. non so se è corretto perche se la metto fuori mi restituisce questo errore:

    "usort() [function.usort]: Invalid comparison function"

    mettendola dentro al metodo della classe non cambia nulla...

  5. #5
    @cucaracha

    l'array viene popolata aggiungendo ogni singolo prodotto nel carrello quindi l'ordine è secondo l' inserimento dei prodotti nel carrello da parte dell'utente.

    non posso fare a meno di ordinarla al momento del checkout per calcolare secondo un algoritmo il prezzo di spedizione

    che sarà:

    [(prezzo di sped. piu alto * q.ta)/1] +
    [(2° prezzo di sped. * qta del prod)/2] +
    [(3° prezzo di sped. * qta del prod)/3] + (x n. prodotti nel carrello)

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da davidino86
    sembrerebbe non sunzionare

    sto inserendo la funzione price_sort dentro a un metodo di una classe. non so se è corretto perche se la metto fuori mi restituisce questo errore:

    "usort() [function.usort]: Invalid comparison function"

    mettendola dentro al metodo della classe non cambia nulla...
    usala cosi:

    uasort( $this->tuo_array, array( $this , "price_sort ) ) ;

    dove $this->tuo_array e' l'array iniziale, e price_sort e' un metodo del oggetto

    uasort al posto di usort per mantenere le associazioni

  7. #7
    grazie per i suggerimenti ma continua a non ordirare, ma stavolta senza errori.

    questo è il codice attuale:

    Codice PHP:

    Class Cart extends Home
    {


        function 
    price_sort($a$b)
        {
            
    $price_a $a['options']['shipPrice'];
            
    $price_b $b['options']['shipPrice'];
            if ( 
    $a == $b )
                return 
    0;
            return (
    $a $b) ? : -1;
        }

        function 
    get_total_ship_price()
        {
            
            
    uasort($this->cart->contents(), array($this"price_sort"));

            
    print_r($this->cart->contents());
             
        }


  8. #8
    ho dimenticato di salvare l'array in una variabile ecco il codice corretto

    Codice PHP:
    Class Cart extends Home
    {


        function 
    price_sort($a$b)
        {
            
    $price_a $a['options']['shipPrice'];
            
    $price_b $b['options']['shipPrice'];
            if ( 
    $a == $b )
                return 
    0;
            return (
    $a $b) ? : -1;
        }

        function 
    get_total_ship_price()
        {
            
    $array_shop $this->cart->contents();
            
    uasort($array_shop, array($this"price_sort"));

            
    print_r($array_shop);
             
        }


    grazie mille a tutti e tre

  9. #9
    nell'ordinamento ho notato un errore

    per es.:

    ho questi tre prezzi di spedizione:

    20.00
    25.00
    50.00

    vedo che l'ordinamento

    è 50, 20, 25

    come puo accadere questo?

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.