Risultati ciclo foreach in tabella

  • Creatore Discussione Creatore Discussione colomber
  • Data di inizio Data di inizio

colomber

Utente Attivo
4 Dic 2012
232
1
18
Ciao a tutti vi spiego il mio problema , ho una parola $parola che prendo da un form da questa creo un'array con tutti i caratteri che la formano $caratteri. Poi ho un'array $dati con migliaia di parole.

Allora per ogni singolo carattere della parola che prendo nel form stampo a video tutte le parole che iniziano con quel carattere. il tutto va dentro l'array $corrispondenze il mio problema é stampare a video i risultati in questo modo esempio parola CASA

Codice:
C              A           S              A

cuore        amore     sabato       amore
cucina       anno      suora         anno
carcere      ansia     silicone       ansia
PHP:
$caratteri = str_split($parola);    
               
$corrispondenze = array(); 
                        
foreach($caratteri as $carattere) {               
    foreach($dati as $dato) {                      
        if (substr($dato, 0, 1) == $carattere) {   
            $corrispondenze[$carattere][] = $dato; 				
        }
    }
}

qualcuno mi aiuta grazie
 
Ultima modifica di un moderatore:
ciao
se non ho capito male quello che vuoi fare, prova così
PHP:
<?php
//......
for($k=0; $k < strlen($parola); $k++){
	echo "<p>carattere. ".$parola[$k]."</p><blockquote>";
	foreack($corrispondenze[$parola[$k]] as $ch =>$val){
		echo "dato: $val<br />";
	}
	echo "</blockquote>";
}
//.......
?>
 
Hai capito benissimo funziona, il problema é che devo inserirli in tabella in questo modo:

HTML:
<table border="1">
<tr><td>C</td><td>A</td><td>S</td><td>A</td></tr>
<tr><td>cuore</td><td>amore</td><td>sabato</td><td>amore</td></tr>
<tr><td>cucina</td><td>anno</td><td>suora</td><td>anno</td><td>
<tr><td>carcere</td><td>ansia</td><td>silicone</td><td>ansia</td></tr>
</table>
 
ciao
prova una cosa del genere
(guarda che l'ho buttao giù al volo)
PHP:
<?php
//......
for($k=0; $k < strlen($parola); $k++){
    foreack($corrispondenze[$parola[$k]] as $ch =>$val){
        if($k==0){
			$inizio[]="<tr><td>$val</td>";
		}elseif($k==(strlen($parola)-1)){
			$fine[]="<td>$val</td></tr>";
		}else{
			$mezzo[]="<td>$val</td>";
		}
    }
}
$quanti=count($inizio);//da quello che ho capito le quntità (cioè le righe) sono uguali
$stampa="";
for($j=0;$j<$quanti;$j++){
	$stampa. =$inizio[$j].$mezzo[$j].$fine[$j];
}
echo "<table border=\"1\">$stampa</table>";
//.......
?>
quindi può essere che non funzi
 
Funziona solo se la parola é lunga da 3 caratteri in giù, se ne scrivo una più lunga i primi due caratteri sono ok mentre mi stampa a video solo l'ultimo carattere dal quarto in su li salta.


ESEMPIO: casa

mi stampa le parole per C , A e poi ultima A

ESEMPIO: urlare

mi stampa le parole per U , R e poi ultima E
 
la parola la prendi da un form per quanto riguarda l'array dati l'originale é una cosa enorme puoi provare con questo qui semplice non sono parole ma lettere

$dati= array(
"a","b","c","d","e","f","g","h","i","l","m","n","o","p","q","r","s","t","u","v","z"
);
 
ciao,
puoi provare anche cosi
PHP:
<?php

$dati = array(
    "cuore", "amore", "sabato",
    "cucina", "anno", "suora",
    "carcere", "ansia", "silicone"
);
$parola = "casa";

echo "<table border=1>";
echo "<tr>";
foreach (str_split($parola) as $lettera) {

    echo "<td>" . $lettera . "<br/>";
    echo "<table>";
    foreach ($dati as $parola) {
        if (substr($parola, 0, 1) == $lettera) {
            echo "<tr>";
            echo "<td>" . $parola . "</td>";
            echo "</tr>";
        }
    }
    echo "</table>";
    echo "</td>";
}
echo "</tr>";
echo "</table>";
?>
 
Criric riesci a mettere ogni parola dentro ad un <td> diverso come nell'esempio prima del tuo?
 
ciao
secondo me criric ha trovato la soluzione, non lo vedi ma ogni parola è dentro un td, per vederlo basta che tu dia border=1 alla table interna
 
guardate l'immagine é il risultato inserendo border=1 non so come togliere gli spazi vuoti nel primo script ero tutto compattato perfettamente

a.png
 
prova ad aggiungere valign top alla td
PHP:
.......
 echo "<td valign='top'>" . $lettera . "<br/>";
......
altrimenti bisogna rivedere i cicli
 
Funziona!

Vi ringrazio siete stati molto gentili ad aiutarmi e complimenti per il sito é davvero utile.
 

Discussioni simili