|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
[PHP] Somma di alcuni valori in un array
Ho un array formato in questo modo
ID ROOM, ID TRATTAMENTO, PREZZO 852, 1, 400 852, 1, 250 852, 2, 300 852, 2, 500 852, 3, 500 852, 3, 600 853, 1, 500 853, 1, 600 Quello che devo fare io + sommare il valore PREZZO per array che hanno uguale ID ROOM e ID TRATTAMENTO. Il tutto sta all'interno dello stesso array multidimensionale. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Allora vediamo se il topic è da riesumare...
Cosa intendi di preciso con "array multidimensionale"? Hai una cosa di questo tipo? Codice PHP:
Codice PHP:
Codice PHP:
__________________
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
In un altro forum mi hanno consigliato
<?php $data[] = array('id_room' => 852, 'id_treatment' => 1, 'price' => 400); $data[] = array('id_room' => 852, 'id_treatment' => 1, 'price' => 250); $data[] = array('id_room' => 852, 'id_treatment' => 2, 'price' => 300); $data[] = array('id_room' => 852, 'id_treatment' => 2, 'price' => 500); $data[] = array('id_room' => 852, 'id_treatment' => 3, 'price' => 500); $data[] = array('id_room' => 852, 'id_treatment' => 3, 'price' => 600); $data[] = array('id_room' => 853, 'id_treatment' => 1, 'price' => 500); $data[] = array('id_room' => 853, 'id_treatment' => 1, 'price' => 600); foreach ($data as $item) { $totali[$item['id_room']][$item['id_treatment']] += $item['price']; } print_r($totali); ?> array(9) { [0]=> array(3) { ["room"]=> string(3) "842" ["treatment_type"]=> string(1) "1" ["price"]=> int(420) } [1]=> array(3) { ["room"]=> string(3) "842" ["treatment_type"]=> string(1) "2" ["price"]=> int(560) } [2]=> array(3) { ["room"]=> string(3) "843" ["treatment_type"]=> string(1) "2" ["price"]=> int(630) } [3]=> array(3) { ["room"]=> string(3) "842" ["treatment_type"]=> string(1) "1" ["price"]=> int(70) } [4]=> array(3) { ["room"]=> string(3) "842" ["treatment_type"]=> string(1) "2" ["price"]=> int(90) } [5]=> array(3) { ["room"]=> string(3) "843" ["treatment_type"]=> string(1) "2" ["price"]=> int(100) } [6]=> array(3) { ["room"]=> string(3) "843" ["treatment_type"]=> string(1) "2" ["price"]=> int(100) } [7]=> array(3) { ["room"]=> string(3) "842" ["treatment_type"]=> string(1) "1" ["price"]=> int(70) } [8]=> array(3) { ["room"]=> string(3) "842" ["treatment_type"]=> string(1) "2" ["price"]=> int(90) } } e mi stampa Array ( [842] => Array ( [1] => 560 [2] => 740 ) [843] => Array ( [2] => 830 ) ) ed è giusto |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
__________________
|
|
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
Quote:
Così com'è lo script non esegue il secondo foreach in quanto somme = array(); ovvero un array vuoto |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
Allora ho riletto e il codice che scrissi a suo tempo mi sembra corretto: Nota quel Codice PHP:
Alla prima iterazione del suddetto ciclo, l'array somme è, come hai detto tu, vuoto ($somme = array() ), e quindi la variabile $flag_trovato sarà false e l'if si attiverà. Significa che non esiste, nell'array somme, un record relativo alla coppia [room,trattamento] e quindi deve essere aggiunto. Dopo la prima iterazione l'array conterrà sicuramente un record. Ad esempio Codice PHP:
Codice PHP:
__________________
|
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
Ciao,
ho creato una nuovo file .php con solamente questo codice Codice PHP:
Array ( ) controlla tu stesso. |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
EDIT
Funziona! In pratica qui if ( !$flag_trovato ) { $sommme[] = $recordA; } scrivi $sommme con 3 m anzichè somme! Vabbè risolto. Ti ringrazio per l'aiuto! |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
UPDATE
A prima vista funzionava ma non fa la somma del prezzo. mi lascia solamente il primo prezzo. controlla tu stesso. Credo che il problema sia qui $recordSomme['PREZZO'] += $recordA['PREZZO']; ovvero $recordSomme['PREZZO'] una volta che è stato aggiunto il prezzo non lo uso più. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Sembrerebbe un problema di reference.
Il foreach opera su una copia dell'elemento dell'array. Prova con Codice PHP:
EDIT: se ti interessa, ti incollo la parte della documentazione che esplica questo lato oscuro del Php Codice PHP:
__________________
Ultima modifica di malocchio : 19-12-2009 alle 12:32. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:23.




















