Newsgroup: it.comp.www.php
Titolo: costruire un ciclo

in una pagina php ho questo codice inserito in un ciclo ripetitivo sin 
quando finisce l'elenco di tutte le cittaX
<?php <div align="justify"><?php echo $row_rs_itin_an_filtr['cittaX']; ?> 
</div>
<?php <div align="justify"><?php echo $row_rs_itin_an_filtr['monumento']; ?> 
</div>
pero la medesima città viene ripetuta per ogni singolo monumento cioè
ASSISI
eremo delle carceri
ASSISI
Basilica
ASSISI
S.Chiara
PERUGIA
Fontana
BEVAGNA
Teatro Romano
come si fa il ciclo per ottenere un qualcosa del genere? (cioè come si fa il 
ciclo dicendo di scrivere i monumenti tutti di seguito sin quando il valore 
cittaX non cambia?)
ASSISI
eremo delle carceri
Basilica
S.Chiara
PERUGIA
Fontana
BEVAGNA
Teatro Romano 

 pero la medesima citt` viene ripetuta per ogni singolo monumento cioh
Effettua la query ordinando per il nome della citta', prima del ciclo
definisci una variabile temporanea, all'interno del ciclo verifichi che
la citta' corrente non sia uguale alla variabile temporanea, se lo e',
stampo la citta', prima della fine del ciclo valorizza la variabile
temporanea con il nome della citta'.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 temporanea con il nome della citta'.
ho provato a fare cosi ma non funziona.....
.forse il problema non è cosi' semplice come sembra o forse sono io che sono 
impedito.
In pratica ho questa query
$query_rs_itin_an_filtr = sprintf("SELECT i.itinerarioanaliticoID, 
i.itinerario, i.giornoX, i.cittaX, i.profilocittaX, g.giornocardinale, 
m.monumento, FROM tbl_itinerarianalitici i LEFT JOIN tbl_giornicardinali g 
ON i.giornoX = g.giornoID LEFT JOIN tbl_monumenti m ON 
i.itinerarioanaliticoID = m.itinID WHERE giornoX = $_GET['giornoX'] AND 
itinerario = $_GET['nomeitinerario'] ORDER BY giornoX"..
$rs_itin_an_filtr = mysql_query($query_rs_itin_an_filtr, $server) or 
die(mysql_error());
$row_rs_itin_an_filtr = mysql_fetch_assoc($rs_itin_an_filtr);
$totalRows_rs_itin_an_filtr = mysql_num_rows($rs_itin_an_filtr);
E a seguire il codice che stampa la pagina (per ogni itinerario vi è l'intestazione 
con scritto primo giorno o secondo giorno, ecc. e sotto vengono stampate le 
città con il loro profilo, monumenti e le curiosità e, anche se per voi 
questo non ha alcuna rilevanza, il tutto suddiviso per giornate con la 
stampa di una barra dove vengono elencati dei numeri e ad ogni numero 
corrisponde un giorno di visita)
<?php if ($totalRows_rs_itin_an_filtr > 0) { // Show if recordset not empty 
?>
<?php //questo codice verifica e stampa la giornata di visita visualizzando 
il numero cardinale
$prec = '0';
$cercag = isset($_REQUEST['giornoX']) ? $_REQUEST['giornoX'] : '';
do {
$oggi = $row_rs_itin_an_filtr['giornoX'];
$oggicard = $row_rs_itin_an_filtr['giornocardinale'];
if (($oggi != $cercag) && ($cercag != ''))
continue;
if ($prec != $oggi)
{
$prec = $oggi;
print <<<GIORNOCARD
<h5 align="center"><class="bodyText Stile61">$oggicard</h5>
GIORNOCARD;
}
?><ul>
<li>
//il codice qui sotto richiama il nome della città
<h6 align="left" class="bodyText Stile59"><?php echo 
$row_rs_itin_an_filtr['cittaX']; ?>
</h6>
</li>
</ul>
<table width="727" height="131" border="0" cellpadding="3" cellspacing="0">
<tr>
// il codice qui sotto richiama la descrizione della città
<td width="727"><div align="justify"><span class="bodyText"><?php echo 
$row_rs_itin_an_filtr['profilocittaX']; ?></span></div>
</tr>
</table>
<div align="justify"></div>
<h5 align="left" class="bodyText Stile58 Stile60">
Cosa vedere </h5> //da qui si fa un elenco dei monumenti da vedere in questa 
citta
<div align="justify"><?php echo $row_rs_itin_an_filtr['monumento']; ?> 
</div>
<?php } while ($row_rs_itin_an_filtr = 
mysql_fetch_assoc($rs_itin_an_filtr)); ?>
<br />
<em><strong>Esplora gli altri giorni</strong></em>
<table>
<tr>
<?php
$giorni = array('1','2','3','4','5','6','7','8','9','10','11','12');
$barra = '';
$ultimog = $row_maxgiorno['MAX(giornoX)'];
$questog = $_GET['giornoX'];
$itin = $_GET['nomeitinerario'];
foreach($giorni as $giorno)
{
if ($giorno == $questog)
$barra .= <<<SENZAURL
<td><strong>$giorno</strong><td>
SENZAURL;
else
if ($giorno <= $ultimog)
$barra .= <<<CONURL
<td><a 
href="itinerari_dettagli.php?nomeitinerario=$itin&giornoX=$giorno">$giorno</a></td>
CONURL;
}
print $barra ;
?>
</tr>
</table>
<?php } // Show if recordset not empty ?>
dove e come devo fare le modifiche ? 

 ho provato a fare cosi ma non funziona.....
Il metodo indicato funziona perfettamente:
<?php 
$data = array();
$data[] = array('citta' => 'ASSISI', 'monumento' => 'eremo delle
carceri');
$data[] = array('citta' => 'ASSISI', 'monumento' => 'Basilica');
$data[] = array('citta' => 'ASSISI', 'monumento' => 'S.Chiara');
$data[] = array('citta' => 'PERUGIA', 'monumento' => 'Fontana');
$data[] = array('citta' => 'BEVAGNA', 'monumento' => 'Teatro Romano');
$prev_citta = '';
foreach($data as $item) {
	if ($item['citta'] != $prev_citta) {
		echo("<b>{$item['citta']}</b><br />");
	}
	echo("{$item['monumento']}<br />");
	$prev_citta = $item['citta'];
}
?>


 ?>
non posso fissare degli array perchè le città sono infinite e in continua 
aggiunta! 

 continua aggiunta!
Il codice che ho scritto e' un esempio, per dimostrarti che l'algoritmo
funziona perfettamente e in quale modo devi implementarlo. Sostituire
l'array con il risultato di una query e' elementare.


> >
alla fine avrei risolto così.....
<?php if ($totalRows_rs_itin_an_filtr > 0) { // ?>
<?php
$prec = '0';
$citta_precedente="";
$cercag = isset($_REQUEST['giornoX']) ? $_REQUEST['giornoX'] : '';
do {
$oggi = $row_rs_itin_an_filtr['giornoX'];
$oggicard = $row_rs_itin_an_filtr['giornocardinale'];
if (($oggi != $cercag) && ($cercag != ''))
continue;
if ($prec != $oggi)
{
$prec = $oggi;
print <<<GIORNOCARD
<h5 align="center"><class="bodyText Stile61">$oggicard</h5>
GIORNOCARD;
}
?>
<ul>
                  <li>
                    <h1 align="left" class="Stile59 bodyText"><strong><?php 
if ($citta_precedente != $row_rs_itin_an_filtr['cittaX']) echo 
$row_rs_itin_an_filtr['cittaX']; ?>                    </strong></h1>
                  </li>
            </ul>
                <table width="727" height="131" border="0" cellpadding="3" 
cellspacing="0">
                  <tr>
                    <td width="727"><div align="justify"><span 
class="bodyText"><?php echo $row_rs_itin_an_filtr['profilocittaX']; 
?></span></div>
                      <br />
                    <div align="center"><span class="bodyText Stile59"><img 
src="<?php echo $row_rs_itin_an_filtr['fotocittaX']; ?>" hspace="5" 
/></span></div></td>
                  </tr>
              </table>
                <h6 align="left" class="bodyText Stile59"></h6>
                <div align="justify"></div>
                <h5 align="left" class="bodyText Stile58 Stile60">
Cosa vedere </h5>
<div align="justify">
                <p> <?php $row_rs_itin_an_filtr['monumento'] =
preg_replace("/([a-zA-Z]+:\/\/[a-z0-9\_\.\-]+".
"[a-z]{2,6}[a-zA-Z0-9\/\*\_\-\?\&\%\=\,\.]+)/", '<a href="$1" 
style="text-decoration:
underline;background:none;display:inline;padding:0;margin:0;font-size:
12px;" target="_blank">sito ufficiale</a>', 
$row_rs_itin_an_filtr['monumento']);
echo $row_rs_itin_an_filtr['monumento'];
 ?> </p>
                </div>
                <?php if (($row_rs_itin_an_filtr['curiositacittaX'] != "")) 
{ // Show if recordset not empty ?>
                  <h5 align="left" class="bodyText  Stile58"><br />
                  <span class="bodyText  Stile58 
Stile60">Curiosit&agrave;</span></h5>
                  <div align="justify">
                    <p><?php echo $row_rs_itin_an_filtr['curiositacittaX']; 
?> <br />
                    </p>
              </div>
                  <?php } // Show if recordset not empty ?>
      <?php if (($row_rs_itin_an_filtr['appunti'] != "")) { // Show if 
recordset not empty ?>
                  <h5 align="left" class="bodyText  Stile58"><br />
                  <span class="bodyText  Stile58 Stile60">Diario di 
Viaggio</span></h5>
                  <div align="justify">
                    <p><?php echo $row_rs_itin_an_filtr['appunti']; ?> <br 
/>
                    </p>
              </div>
                  <?php } // Show if recordset not empty ?><br />
                  <?php $citta_precedente= $row_rs_itin_an_filtr['cittaX']; 
?>

rimane un piccolo problema...la città non me la ripete ma purtroppo mi 
ripete il punto dell'elenco puntato, il valore profilocittaX e il titolo 
'Cosa vedere'.
Sono nel pallone....Come faccio per impedire cio'?