Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387

    Array multidimensionale ordinamento o inserimento nuovi valori

    Ciao a tutti
    ho questo array $member_card
    codice:
    Array
    (
        [0] => Array
            (
                [customer_rank] => 2
                [card_number] => 1100102300149
                [customer_code] => 6363053707749726
                [customer_first_name] => anna
                [customer_last_name] => D.
                [customer_balance] => 4320
            )
    
        [1] => Array
            (
                [customer_rank] => 5
                [card_number] => 1100102300719
                [customer_code] => 3192119783010313
                [customer_first_name] => DANIELA
                [customer_last_name] => S.
                [customer_balance] => 2768
            )
    )
    Vi premetto che il primo passaggio che fatto è ordinare in modo decrescente i vari CUSTOMER_BALANCE.
    Fatto questo devo "risistemare" i vari rank, che non sono altro che le posizioni in classifica di ogni singolo utente.
    Infatti come vedete il primo dovrebbe essere 1 e non 2 e il secondo 2 e non 5.

    Vorrei pertanto "riscriverli" partendo da uno, come posso fare?

    Grazie mille!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Codice PHP:
    foreach ($member_card as $i => &$member) {
      
    $member['customer_rank'] = $i+1;
    }; 

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    Ovviamente è perfetto!
    Prima di tutto grazie!
    Secondo, puoi per favore minimamente spiegarmelo? Non mi piace solo la pappetta pronta

    Sopratutto il fatto della "&" davanti a member...

    Grazie ancora!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Codice PHP:
    // foreach prende un vettore e scorre gli elementi
    // foreach (
    //   $member_card <--- vettore da scorrere
    //     as
    //       $i                   <--- variabile che prende i valori degli indici (0, 1, ... nel tuo caso)
    //          => 
    //        &$member    <----  " per i valori degli elementi (i "sottovettori" nel tuo caso)
    //   )
    foreach ($member_card as $i => &$member) { 
      
    $member['customer_rank'] = $i+1
    }; 
    la "&" davanti alla variabile $member la utilizza "per riferimento", così che cambiando il suo valore dentro il ciclo si aggiorna il vettore principale, si può anche fare:

    Codice PHP:
    foreach ($member_card as $i => $member) { 
      
    $member['customer_rank'] = $i+1
      
    $member_card[$i] = $member// altrimenti non aggiorni il vettore principale
    }; 

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    La & serve per i passaggi di per riferimento.
    In questo caso il ciclo quando legge i dati li legge per riferimento e non per copia, di modo che quando modifichi il campo .... beh vai a scrivere nella locazione di memoria dell'array piuttosto che in una sua copia. Anche se ..... devo dire che mi sorge un dubbio a riguardo ... eyen ma e' davvero necessaria come chiamata in foreach? Non mi pare di aver mai avuto necessità di usare le var "by ref" in tale contesto ....

    Vabb attendiamo ulteriori chiarimenti.

    Cmq se noti la posizione nell'array ti da già il "rank che cerchi"-1 sovrascriverlo in un campo interno dell'array e' un dato ridondandte e a meno che tale strutura dati non venfga pos "smontata" non capisco l'utilità.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    @Virus_101... sì: anche facendo delle provo si vede che se cicli con foreach e modifichi l'elemento dell'iterazione cambi quello, ma non la "copia" dentro l'array principale e in effetti è corretto perchè tu hai una variabile "fresca" settata dal foreach con un suo nome.
    Piuttosto io ho scoperto che in molti casi in realtà possono presentarsi problemi inattesi (avevo anche segnalato dei bug se alcune versioni del php) e talora uso la seconda versione :)

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Capisco io finora nn ho mai avuto probs in tal senso ... sarà stato culo

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    @Virus
    Cmq se noti la posizione nell'array ti da già il "rank che cerchi"-1 sovrascriverlo in un campo interno dell'array e' un dato ridondandte e a meno che tale strutura dati non venfga pos "smontata" non capisco l'utilità.
    In effetti la struttura in visualizzazione poi la smonto per farci una tabella... Avevo pensato anche io di usare l'indice+1 per ottenere il rank ma poi ho preferito spremere un po' di più il server per ottenere un campo in più

    @eiyen grazie veramente anche per la spiegazione... una cosa in più da aggiungere al bagaglio informatico

    L'unico problema me lo pongo quando dici
    Piuttosto io ho scoperto che in molti casi in realtà possono presentarsi problemi inattesi (avevo anche segnalato dei bug se alcune versioni del php) e talora uso la seconda versione
    Mi consigli di usare quindi questo codice o il primo che mi hai postato?

    codice:
    foreach ($member_card as $i => &$member) {
      $member['customer_rank'] = $i+1;
    }
    ?

    Grazie ancora!

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.