Μεταβλητή array σε while loop

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Μεταβλητή array σε while loop

Δημοσίευση από Geotenia » 11 Οκτ 2012 11:05

Προσπαθώ να φτιάξω 3 arrays που είναι μέσα σε 2 while loops. Συγκεκριμένα:

Κώδικας: Επιλογή όλων

$i = 1;
$qper = "SELECT * FROM Perifereies_NUTS";
$rper = mysql_query($qper);
while ($rowper = mysql_fetch_array($rper)) {

$sql = "SELECT c.Metro, Count(a.Ergo_ID) AS synerg, ROUND(Sum(a.Egkekrimenh_DD),2) AS dd\n"
    . "FROM Ergo a INNER JOIN Ax_Ergo_Bathmologhsh b ON a.Ergo_ID = b.Ergo_ID INNER JOIN Metra c ON a.Metro = c.Metro_ID\n"
    . "WHERE a.Perifereies_NUTS=".$rowper['Kod_perif']." AND b.nextgnom='E' GROUP BY c.Metro ORDER BY a.Metro";

$r = mysql_query($sql);
      
$data1[$i] = array();
$data2[$i] = array(); 
$data3[$i] = array();   

      while ($row = mysql_fetch_array($r)) {
         $data1[$i][] = $row['Metro'];
         $data2[$i][] = $row['dd'];
         $data3[$i][] = $row['synerg'];

echo $data2[$i];
print_r($data2[$i]);

$d1 = join("','",${data1.$i});
$d2 = join(',', $data2[$i]);
$d3 = join(',', $data3);
echo $d1;
echo $d2;

}
$i =$i+1;
}
Οι μεταβλητές arrays data1[$i], $data2[$i] και $data[$i] μου βγαίνουν 4 φορές όσες και το μεσαίο lopp. Δηλαδή το αποτέλεσμα για την $data2[$i] βγαίνει κάπως έτσι:

Κώδικας: Επιλογή όλων

Array ( [0] => 309741.53 )
Array ( [0] => 309741.53 [1] => 468122.32 )
Array ( [0] => 309741.53 [1] => 468122.32 [2] => 105980.00 )
Array ( [0] => 309741.53 [1] => 468122.32 [2] => 105980.00 [3] => 2174257.57 )
Δηλαδή κάθε φορά φτιάχνει μιά καινούργια array που προσθέτει ένα νούμερο από το loop.
Το θέμα είναι ότι εγώ θέλω μόνο τη τελευταία. Πως μπορώ να το κάνω αυτό? Που κάνω λάθος? Το παλεύω 4 μέρες τώρα. Με αυτά θέλω να φτιάξω πολλά charts και θέλω κάθε φορά να παίρνω τη καινούργια array ώστε να τη βάζω σωστά στη θέση της με ένα for loop στην javascript του highcharts.

λίγη βοήθεια από όποιον μπορεί και θέλει!!!

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Μεταβλητή array σε while loop

Δημοσίευση από burnmind » 11 Οκτ 2012 14:25

Το data2 array το δηλώνεις αφότου αρχίσει το 1ο loop και του βάζεις δεδομένα κατά τη διάρκεια του 2ου loop. Το ότι σου εκτυπώνει 4 φορές το περιεχόμενό του συμβαίνει λόγω του ότι του λες να σου το εκτυπώσει (print_r) μέσα στο 2ο loop. Αν θέλεις να στο εκτυπώνει κάθε φορά που ολοκληρώνεται ο κύκλος του 1ου loop, τότε βγάλτο από το 2ο while και βάλ'το πάνω από το $i =$i+1; (το οποίο μπορείς να γράψεις και ως $i++).

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Μεταβλητή array σε while loop

Δημοσίευση από Geotenia » 17 Οκτ 2012 12:35

Τελικά είχες δίκιο. Τώρα έχω δύο άλλα θέματα.
1. Στη javascript που καλώ αυτές τις arrays και δημιουργώ charts πως θα πάτω τη κάθε μία χωριστά για να μου φτιάξει chart για τη συγκεκριμένη μόνο? Επειδή τώρα μου φτιάχνει ένα μόνο chart που έχει μέσα και τις 13 arrays τη μιά δίπλα στην άλλη. Δηλαδή δε μου φτιάχνει 13 διαφορετικά chart. Χρησιμοποιώ το Hicharts για τα γραφικά.

2. Εχω μιά SELECT query και μαζεύω κάποια δεδομένα. Είναι αυτή που βλέπετε παραπάνω. Στο WHERE clause έχω βάλει ένα b.nextgnom='E'. Μου δίνει λοιπόν το count των εγγραφών που έχουν nextgnom=E. Αυτό το πεδίο παίρνει τιμές Ε και Α. Πως μπορώ να τροποποιήσω αυτή τη query ώστε να μου δίνει και το count των τιμών Α. Δηλαδή αν αφαιρέσω το b.nextgnom='E' θα μου επιστρέψει όλες τις τιμέ αυτών. Μπορώ μετά από το result να ξεχωρίσω πόσες έχουν nextgnom=e και πόσες nextgnom=A?

Ευχαριστώ πολύ για την ασχολία σας και τις απαντήσεις σας!!!

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Μεταβλητή array σε while loop

Δημοσίευση από dva_dev » 17 Οκτ 2012 15:06

Για το 2) δοκίμασε κάτι τέτοιο

Κώδικας: Επιλογή όλων

$sql = 'SELECT b.nextgnom, c.Metro, Count(a.Ergo_ID) AS synerg, ROUND(Sum(a.Egkekrimenh_DD),2) AS dd FROM Ergo a INNER JOIN Ax_Ergo_Bathmologhsh b ON a.Ergo_ID = b.Ergo_ID INNER JOIN Metra c ON a.Metro = c.Metro_ID WHERE a.Perifereies_NUTS='.$rowper['Kod_perif'].' GROUP BY c.Metro,b.nextgnom ORDER BY a.Metro';

Κώδικας: Επιλογή όλων

echo $row['nextgnom'];

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Μεταβλητή array σε while loop

Δημοσίευση από burnmind » 17 Οκτ 2012 22:23

Post-αρε τον κώδικα τον οποίο χρησιμοποιείς για να δημιουργήσεις τα charts.

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Μεταβλητή array σε while loop

Δημοσίευση από Geotenia » 18 Οκτ 2012 09:11

Ευχαριστώ πολύ για τις απαντήσεις σας.
Το δεύτερο θέμα το έλυσα με τον τρόπο που θα δείτε στην query.
Ο πλήρης κώδικας έχει όπως παρακάτω:

Κώδικας: Επιλογή όλων

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml">
   
<head>
   <script src="js/jquery.min.js" type="text/javascript"></script>   
   <script src="js/highcharts.js"></script>
   <script src="js/modules/exporting.js"></script>
</head>
<body>
<?php
include 'core/init.php';
include 'includes/overall/header.php';
      
$i = 1;
$qper = "SELECT * FROM Perifereies_NUTS";
$rper = mysql_query&#40;$qper&#41;;
while &#40;$rowper = mysql_fetch_array&#40;$rper&#41;&#41; &#123;
echo '<table id="grad" border="1" width=\'60%\'>';
echo "<tr><th><input type='text' id='pin' value='$i' />".$rowper&#91;'Perifereia'&#93;."</th></tr>";
echo '</table>';
$ddtot = 0;
$yptot = 0;

$msq = "SELECT * FROM epidothshper WHERE perifereia=".$rowper&#91;'Kod_perif'&#93;." ORDER BY metro";
$rmsq = mysql_query&#40;$msq&#41;;
echo '<table id="grad" border="1" width="60%">';
echo '<thead><tr><th>Μέτρο</th><th>Ποσό ΔΔ</th><th>Συν. έργων</th><th>Εγκ. έργα</th><th>Απορ. έργα</th><th>Επιδότηση</th><th>Υπόλοιπο</th></tr></thead><tbody>';
while &#40;$rowep = mysql_fetch_array&#40;$rmsq&#41;&#41; &#123;

$sql = "SELECT c.Metro, Count&#40;a.Ergo_ID&#41; AS synerg, SUM&#40;IF&#40;b.nextgnom='E',1,0&#41;&#41; AS egk, SUM&#40;IF&#40;b.nextgnom='A',1,0&#41;&#41; AS apor, ROUND&#40;Sum&#40;a.Egkekrimenh_DD&#41;,2&#41; AS dd\n"
    . "FROM Ergo a INNER JOIN Ax_Ergo_Bathmologhsh b ON a.Ergo_ID = b.Ergo_ID INNER JOIN Metra c ON a.Metro = c.Metro_ID\n"
    . "WHERE a.Perifereies_NUTS=".$rowper&#91;'Kod_perif'&#93;." AND a.Metro=".$rowep&#91;'metro'&#93;."";
$r = mysql_query&#40;$sql&#41;;

$data1&#91;$i&#93; = array&#40;&#41;;
$data2&#91;$i&#93; = array&#40;&#41;;
$data3&#91;$i&#93; = array&#40;&#41;;
  
	while &#40;$row = mysql_fetch_array&#40;$r&#41;&#41; &#123;

		$data1&#91;$i&#93;&#91;&#93; = $row&#91;'Metro'&#93;;
		$data2&#91;$i&#93;&#91;&#93; = $row&#91;'dd'&#93;;
		$data3&#91;$i&#93;&#91;&#93; = $row&#91;'synerg'&#93;;
		$yp = $rowep&#91;'poso'&#93;-$row&#91;'dd'&#93;;
		$apor = $row&#91;'synerg'&#93;-$row&#91;'egk'&#93;;
	echo '<tr><th align="right">'.$row&#91;'Metro'&#93;.'</th><td align="right">'.$row&#91;'dd'&#93;.'</td><td align="center">'.$row&#91;'synerg'&#93;.'</td><td align="center">'.$row&#91;'egk'&#93;.'</td><td align="center">'.$apor.'</td><td align="right">'.$rowep&#91;'poso'&#93;.'</td><td align="right">'.$yp.'</td></tr>';

$ddtot = $ddtot+$row&#91;'dd'&#93;;
$yptot = $yptot+$yp;
if &#40;$yptot<0&#41; &#123;$yptot='<font color="red">'.$yptot.'</font>';&#125;

$d1&#91;$i&#93; = join&#40;"','",$&#123;data1.$i&#125;&#41;;
$d2&#91;$i&#93; = join&#40;',', $data2&#91;$i&#93;&#41;;
$d3&#91;$i&#93; = join&#40;',', $data3&#41;;
&#125;
$i =$i+1;
&#125;
?>

</tbody>
<tfoot>
<tr><th>Σύνολα&#58;</th><th align="right"><?php echo $ddtot; ?></th><th></th><th></th><th></th><th></th><th align="right"><?php echo $yptot; ?></th></tr>
</tfoot>
</table>
<br><br>
<?php
echo '<div id="container'.$i.'" style="min-width&#58; 400px; height&#58; 400px; margin&#58; 0 auto"></div>';
$i =$i+1;
&#125;

?>
      <script type="text/javascript">
$&#40;function &#40;&#41; &#123;  
      
$&#40;document&#41;.ready&#40;function &#40;&#41; &#123;

	for&#40;var i=1; i< 14; i++&#41; &#123;     	
     	
       	var chart = 'chart'+i;
       	var container = 'container'+i;
           chart = new Highcharts.Chart&#40;&#123;
              chart&#58; &#123;              			
                renderTo&#58; container,
                type&#58; 'column'
              &#125;,
            title&#58;   &#123;
                     text&#58; 'Δημόσια δαπάνη ανά μέτρο'
                  &#125;,
            xAxis&#58;    &#123;
                     categories&#58; &#91;'<?php echo $d1 ?>'&#93; 
                  &#125;,
            yAxis&#58;   &#91;&#123;
				    labels&#58; &#123;
                    formatter&#58; function&#40;&#41; &#123;
                    return this.value;
                    &#125;,
                    style&#58; &#123;
                        color&#58; '#89A54E'
                    &#125;
                &#125;,
				title&#58; &#123;
                    text&#58; 'Δημόσια Δαπάνη',
                    style&#58; &#123;
					color&#58; '#89A54E'
                    &#125;
                &#125;,
                     min&#58;0
                  &#125;,&#123;
                  title&#58; &#123;
                    text&#58; 'Εργα',
                    style&#58; &#123;
                        color&#58; '#4572A7'
                    &#125;
                &#125;,
                opposite&#58; true
                 &#125; &#93;,
            legend&#58;   &#123;
                     layout&#58; 'vertical',
                     backgroundColor&#58; '#FFFFFF',
                     align&#58; 'left',
                     verticalAlign&#58; 'top',
                     x&#58; 120,
                     y&#58; 100,
                     floating&#58; true,
                     shadow&#58; true
                  &#125;,
            plotOptions&#58; &#123;
                        column&#58; &#123;
                                 pointPadding&#58; 0.2,
                                 borderWidth&#58; 0
                              &#125;
                     &#125;,
            series&#58; &#91;   &#123;
                        name&#58; 'Δημόσια Δαπάνη',
                        data&#58; &#91;<?php echo $d2;  ?>&#93;
                     &#125;,
                     &#123;                     
                        name&#58; 'Εργα',
                type&#58; 'line',
                yAxis&#58; 1,
                data&#58; &#91;<?php echo $d3;  ?>&#93;
                     &#125;
                  &#93;
         &#125;&#41;;
		&#125;  
   &#125;&#41;;
 &#125;&#41;;
      </script>
<?php
include 'includes/overall/footer.php';
?>
Οποιαδήποτε σκέψη δεκτή!!

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Μεταβλητή array σε while loop

Δημοσίευση από burnmind » 19 Οκτ 2012 01:02

Διαβάζοντας στα γρήγορα κάποιες απαντήσεις σε παρόμοια προβλήματα (δες εδώ κι εδώ), υποθέτω πως δε γίνεται με ένα απλό for loop. Ακόμα και να γίνεται, απ'ότι βλέπω περνάς τα ίδια δεδομένα κάθε φορά, οπότε αν δουλέψει θα καταλήξεις με ίδια charts. Ρίξε μια ματιά στα 2 links, λογικά θα σε βοηθήσουν.

Καλοπροαίρετα πάντα, ο κώδικάς σου δε διαβάζεται. Ίσως φταίει που είχα δύσκολη μέρα, αλλά πραγματικά κουράστηκα διαβάζοντας ένα σωρό μεταβλητές που δε βγάζουν νόημα, με αποτέλεσμα να παρατήσω την προσπάθεια πολύ γρήγορα.

Και άσε με 'μένα, αν γυρίσεις εσύ μερικούς μήνες (και μερικά projects) μετά για να διορθώσεις κάτι σ'αυτό το πράγμα, θα είναι τρομερά δύσκολο να θυμάσαι τι είναι το $d1, τι το $data1, τι το $ddtot κλπ, όπως επίσης θα σου φανεί περίεργο που κάπου γράφεις "καθαρή" html και μετά από λίγο την κάνεις echo μέσω php. Ελπίζω πως "πιάνεις" τι εννοώ.

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Μεταβλητή array σε while loop

Δημοσίευση από Geotenia » 19 Οκτ 2012 09:18

Το ξέρω δίκιο έχεις. Απλά είναι κώδικας που τον δουλεύω ακόμα. Δεν τον έχω δημοσιεύσει. Και τον "καθάρισα" κιόλας για να τον βγάλω εδώ!! Απλά δοκιμάζω διάφορα να δω τι θα μου κάτσει τελικά. Μετά θα καθαρίσει.
Ευχαριστώ πολύ πάντως. Πάω να δω τα Links που έδωσες.

edit: Το βασικό πρόβλημα είναι ότι ενώ διαβάζει τα διαφορετικά δεδομένα τα βγάζει όλα στο πρώτο container και δεν ακολουθεί τη σειρά.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης