Unire deglia rray bidiemnsionali

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Allora raga non soq aunte volte stavo aprendo una discussione per due cicli for un pò complessi ma poi tenta che tenta, ragionando che ragioanndo non ne avevo più bisogno.

Ora però mi sono infognato su una cosa un pò stupida ma penso si possa risolvere solo con la conoscenza e non con il ragionamento.

In sostanza uno di questi cicli foreach mi scansiona delle tabelle e mi crea dei multi array del tipo

PHP:
$tabelle_prova=array(tabella1,tabella2,tabella3);
foreach($tabelle_prove as $tab){
$sqlquery = "SELECT DISTINCT(nome) FROM ".$tab."";
$result = mysql_query($sqlquery)or die("ERROR".mysql_error());
if(mysql_num_rows($result)){
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 $id_nomi[$tab][]=$linea['nome'];
}

foreach($id_nomi as $key1=>$nomi) {	
foreach($nomi as $key=>$n) {	
$query = "SELECT SUM(number1) as nr1 FROM ".$tab." WHERE  nome='{$n}'";
$risultato = mysql_query($query) or die("Query 58: " . mysql_error() );
if($risultato) {
$row = mysql_fetch_array($risultato);
$tot_nr1[$key1][$n]= $row['nr1']; // <- qui hai il risultato che ti aspetti
}
$query = "SELECT SUM(number2) as nr2 FROM ".$tab." WHERE  nome='{$n}' ";
$risultato = mysql_query($query) or die("Query 58: " . mysql_error() );
if($risultato) {
$row = mysql_fetch_array($risultato);
$tot_nr2[$key1][$n]= $row['nr2']; // <- qui hai il risultato che ti aspetti
}
}
}
}

in sostanza ho un multi cosi formato


PHP:
array(4) { ["tabella1"]=> array(3) { ["pippo"]=> 10 ["Topolino"]=> 20 ["Pluto"]=> 30 } 
              ["tabella1"]=> array(3) { ["pippo"]=> 5["Topolino"]=> 10["Pluto"]=> 15 } 
              ["tabella2"]=> array(3) { ["paperino"]=> 10 ["gastone"]=> 20 ["paperoga"]=> 30 } 
              ["tabella2"]=> array(3) { ["paperino"]=> 5["gastone"]=> 10["paperoga"]=> 15 } 
//etc 

}

Come posso fare la somma dei valori nelle varie tabelle cosi da avere un unico array con le somme della tabella 1 e delle altre tabelle?

PHP:
array(2) { ["tabella1"]=> array(3) { ["pippo"]=> 15 ["Topolino"]=> 30 ["Pluto"]=> 45} 
              ["tabella2"]=> array(3) { ["paperino"]=> 15["gastone"]=> 30["paperoga"]=> 45} 
//etc 
}

thank
 
ciao
se non ho capito male quello che vuoi fare, prova così
PHP:
<?php
$tabelle_prova=array(tabella1,tabella2,tabella3);
foreach($tabelle_prove as $tab){
	$sqlquery_1 = "SELECT SUM(number1) as somma_1, nome FROM $tab GROUP BY nome";
	$result_1 = mysql_query($sqlquery_1)or die("ERROR".mysql_error());
	if(mysql_num_rows($result_1)){
		while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 			$nome=$linea['nome']
			$tot_nr1[$tab][$nome]=$linea['somma_1'];
 		}
 	}
	$sqlquery_2 = "SELECT SUM(number2) as somma_2, nome FROM $tab GROUP BY nome";
	$result_2 = mysql_query($sqlquery_2)or die("ERROR".mysql_error());
	if(mysql_num_rows($result_2)){
		while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 			$nome=$linea['nome']
			$tot_nr2[$tab][$nome]=$linea['somma_2'];
 		}
 	}
}
echo "<pre>";
var_dump($tot_nr1, $tot_nr2);
echo "</pre>";
?>
forse puoi anche provare cosi, ma non so se funzi
PHP:
<?php
$tabelle_prova=array(tabella1,tabella2,tabella3);
foreach($tabelle_prove as $tab){
	$sqlquery = "SELECT SUM(number1) as somma_1, SUM(number2) as somma_2, nome FROM $tab GROUP BY nome";
	$result_1 = mysql_query($sqlquery)or die("ERROR".mysql_error());
	if(mysql_num_rows($result)){
		while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 			$nome=$linea['nome']
			$tot_nr1[$tab][$nome]=$linea['somma_1'];
			$tot_nr2[$tab][$nome]=$linea['somma_2'];
 		}
 	}
}
echo "<pre>";
var_dump($tot_nr1, $tot_nr2);
echo "</pre>";
?>
 
allora borgo funzionano perfettamente entrambe, per quello che mi serve però preferisco la prima opzione e devo dire che rispetto al mio codice(che mi dava lo stesso risultato) il tuo è molto più snello e veloce ed anzi potrò adattarlo anche per altre porzioni.

Comodo il GROUP.

Però resto con lo stesso problema ossia la somma di $tot_nr1, e $tot_nr2

ovviamente dove $tab e $nome siano uguali,

ho provato con un if ma non ne vengo fuori.
 
ciao
da quello che ho capito i nomi suno uguali nelle tabelle, se è così prova
PHP:
<?php
$tabelle_prova=array(tabella1,tabella2,tabella3);
foreach($tabelle_prove as $tab){
    $sqlquery_1 = "SELECT SUM(number1) as somma_1, nome FROM $tab GROUP BY nome";
    $result_1 = mysql_query($sqlquery_1)or die("ERROR".mysql_error());
    if(mysql_num_rows($result_1)){
        while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
             $nome=$linea['nome']
            $tot_nr1[$tab][$nome]=$linea['somma_1'];
			$tot[$nome]=$linea['somma_1'];//nel primo while solo l'uguale
         }
     }
    $sqlquery_2 = "SELECT SUM(number2) as somma_2, nome FROM $tab GROUP BY nome";
    $result_2 = mysql_query($sqlquery_2)or die("ERROR".mysql_error());
    if(mysql_num_rows($result_2)){
        while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
             $nome=$linea['nome']
            $tot_nr2[$tab][$nome]=$linea['somma_2'];
			$tot[$nome]+=$linea['somma_2'];//nei successivi while +=
         }
     }
}
echo "<pre>";
var_dump($tot_nr1, $tot_nr2, $tot);
echo "</pre>";
?>
dovrebbe funzionare anche se i nomi non sono tutti gli stessi
 
niet i nomi epr ogni tabella sono diversi

però per ogni tabella mi deve sommare i campi numer1 e number2

cmq provo e ti comunico l'esito
 
Letto ora la tua risposta, ti spiego

l'array è composto cosi

PHP:
$tot_nr1=array(
[topolinia]=>{pippo=>1. topolino=>5,pluto=>10}
[paperopoli]=>{paperino=>1. paperone=>5,basettoni=>10}
);

$tot_nr2=array(
[topolinia]=>{pippo=>5. topolino=>15,pluto=>20}
[paperopoli]=>{paperino=>5. paperone=>15,basettoni=>20}
);

a me serviva rtaggiungere questo


PHP:
$tot=array(
[topolinia]=>{pippo=>6. topolino=>20,pluto=>30}
[paperopoli]=>{paperino=>6. paperone=>20,basettoni=>30}
);

quindi in pratica somarmi i due array dove la chiave principale era uguale ed i nomi uguali.
 

Discussioni simili