Iterazione Foreach dentro un ciclo for

Philophp

Nuovo Utente
15 Feb 2011
2
0
0
Ciao a tutti, mi chiamo Filippo, programmo in PHP da ieri con decorrenza domani (!)
e vi scrivo perchè non riesco a ciclare correttamente una tabella che mostri in automatico le città del lotto (estraendo i nomi da un array).
Non genera errori, ma semplicemente ripete tutte le città e ne include una sola (la prima):


Codice:
<?php

    echo "<table border=\"1\">";
    
    // questo è il ciclo per le 11 estrazioni
    for ($ruota=1; $ruota<=11; $ruota++)
            {
                echo "<tr><td>Ruota di ";
                // i nomi delle città
                $citta=array('Bari', 'Cagliari', 'Firenze', 'Genova', 'Milano', 'Napoli', 'Palermo', 'Roma', 'Torino', 'Venezia', 'Nazionale');
                foreach ($citta as $valore)
                {
                    echo $valore."</td>";
                }
                    
                 // le 5 estrazioni                       
                for ($estra=1; $estra<=5; $estra++)
                {
                    echo "<td>".mt_rand(1,90)."</td>";
                    }
                    
            echo "</tr>";
                
            }

echo "</table>";
    
    ?>

Suggerimenti?
grazie,
F.
 
Ultima modifica:
Il ciclo è organizzato male. Prova così:
PHP:
<?php
$cities = array('Bari', 'Cagliari', 'Firenze', 'Genova', 'Milano', 'Napoli', 'Palermo', 'Roma', 'Torino', 'Venezia', 'Nazionale');

echo '<table border="1">';

foreach($cities as $city)
{
	echo '<tr>';
	echo "<td>Ruota di {$city}</td>";
	
	for($i = 1; $i <= 5; $i++)
		echo '<td>'. mt_rand(1, 90) .'</td>';
	
	echo '</tr>';
}

echo '</table>';
?>
 
ciao Alessandro,

grazie, non ci sarei arrivato nemmeno tra 6000 anni.
Ma dimmi per favore, è sbagliato mettere un foreach dentro un for?
come mai poi non hai chiuso le {} del for?

ciao,
F.
 
Dipende cosa devi fare. Nel tuo caso la logica dell'applicazione era sbagliata, perché stavi cercando di fare una cosa diversa da quella che chiedevi.
Non ho messo le parentesi graffe nel for perché, quando un blocco di codice è formato da una sola istruzione, si possono anche omettere.
 
buon giorno,
io ho un problema tipo quello di questo topic...

dovrei cancellare le prime righe da un file ed ho usato gli array per trovare la riga dove cè <body>

cioè ho inserito il contenuto del file dentro un array poi ho inserito questo codice:

ho provato così però non funge....

array del file inserito in $lines

//cerco la ricorrenza <body>
$nome="<body>";
foreach ($lines as $key => $value){

if (stristr($value, $nome))
for($i=0; $i >=$key;$i++){

// vorrei cancellare le righe da 0 a $key che sarebbe dove c è <body>
unset($lines[$i]);

}

}

questo mi trova in numero di linea dove è contenuto <body> però il ciclo for non funziona così.
cioè non cancella proprio niente....



dove sbaglio ?
 
Ciao,
prova cosi:

PHP:
$nome = "<body>";
foreach ($lines as $key => $value) {
    if (stristr($value, $nome)) {        
            unset($lines[$key]);       
    }
}
 
Ciao,
prova cosi:

PHP:
$nome = "<body>";
foreach ($lines as $key => $value) {
    if (stristr($value, $nome)) {        
            unset($lines[$key]);       
    }
}


si ok però a me serve che mi cancella gli elementi array fino alla chiave che si trova <body>

cioè da values[0] a $values[$key]
 
Scusa non avevo capito

e forse non ancora

cosi potrebbe andare?

PHP:
$nome = "<body>";
foreach ($lines as $key => $value) {
        // se la riga non contiene body la cancello
    if (!stristr($value, $nome)) {
        unset($lines[$key]);
        // appena trovo body esco dal ciclo
    } else {
        exit;
    }
}
 
Scusa non avevo capito

e forse non ancora

cosi potrebbe andare?

PHP:
$nome = "<body>";
foreach ($lines as $key => $value) {
        // se la riga non contiene body la cancello
    if (!stristr($value, $nome)) {
        unset($lines[$key]);
        // appena trovo body esco dal ciclo
    } else {
        exit;
    }
}



Scusa non avevo capito

e forse non ancora

cosi potrebbe andare?

PHP:
$nome = "<body>";
foreach ($lines as $key => $value) {
        // se la riga non contiene body la cancello
    if (!stristr($value, $nome)) {
        unset($lines[$key]);
        // appena trovo body esco dal ciclo
    } else {
        exit;
    }
}



Si l 'idea è buona però mi cancella tutto l array..sembra che supera la condizione che hai messo....

e poi mi serviva che anche body veniva cancellato ..ma quello l ho risolto così:

PHP:
$nome = "<body>";
foreach ($lines as $key => $value) {
        // se la riga non contiene body la cancello
    if (!stristr($value, $nome)) {
        unset($lines[$key]);
        // appena trovo body esco dal ciclo
    } else {
        
	foreach ($lines as $key => $value){
	$nome="<body>";
        if (stristr($value, $nome))
               unset($lines[$key]);
	       }
	
	
	
    }
}

cioè facendo un altro foreach e cancellando la riga body... l ho messa dentro l' else perchè mi serviva che il codice non uscisse con exit perchè dopo c'è altro codice da svolgere.

però rimane il fatto che si cancella tutto l array...strano cmq a vederlo mi sembrava che non dovrebbe ...mah


io ho trovato una alternativa così:


PHP:
foreach ($lines as $key => $value){
	$nome="<body>";
        if (stristr($value, $nome))
               unset($lines[$key]);
	       }
	       
	       
	       foreach ($lines as $key => $value){
	$nome="</head>";
	if (stristr($value, $nome))
               unset($lines[$key]);
	       }
	       
	       foreach ($lines as $key => $value){
	       $nome="<dateModified>";	       
	       if (stristr($value, $nome))
               unset($lines[$key]);
	       }
	       foreach ($lines as $key => $value){
	       $nome="<title>";	       
	       if (stristr($value, $nome))
               unset($lines[$key]);
	       }
	       foreach ($lines as $key => $value){
	       $nome="<head>";	       
	       if (stristr($value, $nome))
               unset($lines[$key]);
	       }


ma non mi piace molto anche se cmq. funziona, ma non vorrei che variasse qualche intestazione e allora poi rimarrei fregato.
 
Ultima modifica:
ok ci sono riuscito...aggiungendo break; al posto di exit.

grazie sei stato molto gentile dandomi questa dritta.. :fonzie:

ciao
 

Discussioni simili

L
Risposte
0
Visite
895
PHP
leonte54
L