wacie Skrevet 10. august 2004 Skrevet 10. august 2004 Hei, lurte på hvordan koden blir hvis: jeg skal hente fram et kart fra en text fil. også skal text filen blir vist med tabeller. map.txt ####### #-ccc-# #sssss# #-----# #sssss# ####### # = <td bgcolor="#000000"><td> - = <td bgcolor="#FFFFFF"><td> c = <td bgcolor="#0000FF"><td> s = <td bgcolor="#FF0000"><td> -wacie
magh Skrevet 10. august 2004 Skrevet 10. august 2004 Noe á la dette? $map = file( 'map.txt' ); $retval = "<table>"; foreach ( $map as $line ) { $retval .= "<tr>"; for( $i = 0; $i < strlen( $line ) + 1; $i++ ) { $char = $line{$i}; switch ( $char ) { case "#": $retval .= "<td bgcolor=\"#000000\">#</td>"; break; case "-": $retval .= "<td bgcolor=\"#FFFFFF\">-</td>"; break; case "c": $retval .= "<td bgcolor=\"#0000FF\">c</td>"; break; case "s": $retval .= "<td bgcolor=\"#FF0000\">s</td>"; break; } } $retval .= "</tr>\n"; } $retval .= "</table>";
jorgis Skrevet 10. august 2004 Skrevet 10. august 2004 Du kan bytte ut hele switch-setningen din med en rekke str_replace()-kall, som Lokaltog prøvde å si. $retval = str_replace("#", "<td bgcolor=\"#000000\"><td>", $retval); $retval = str_replace("-", "<td bgcolor=\"#FFFFFF\"><td>", $retval); $retval = str_replace("c", "<td bgcolor=\"#0000FF\"><td>", $retval); $retval = str_replace("s", "<td bgcolor=\"#FF0000\"><td>", $retval); Er dog litt usikker på om du kanskje må escape # i strengen som skal settes inn.
Lokaltog Skrevet 10. august 2004 Skrevet 10. august 2004 Du kan bytte ut hele switch-setningen din med en rekke str_replace()-kall, som Lokaltog prøvde å si. $retval = str_replace("#", "<td bgcolor=\"#000000\"><td>", $retval); $retval = str_replace("-", "<td bgcolor=\"#FFFFFF\"><td>", $retval); $retval = str_replace("c", "<td bgcolor=\"#0000FF\"><td>", $retval); $retval = str_replace("s", "<td bgcolor=\"#FF0000\"><td>", $retval); Er dog litt usikker på om du kanskje må escape # i strengen som skal settes inn. For å speede opp hele prosessen kan du også la vær å bruke dobbeltfnutter ("), siden det ikke er nødvendig i dette tilfellet. PHP slipper å søke etter variabler i de strengene, og du slipper å escape 10 dobbeltfnutter i HTML-koden du skal printe. I tillegg kan det være lurt å ha innhold i tabellcellene slik at de synes, slik: <?php $retval = str_replace('#', '<td bgcolor="#000000"> <td>', $retval); $retval = str_replace('-', '<td bgcolor="#FFFFFF"> <td>', $retval); $retval = str_replace('c', '<td bgcolor="#0000FF"> <td>', $retval); $retval = str_replace('s', '<td bgcolor="#FF0000"> <td>', $retval); ?>
jorgis Skrevet 10. august 2004 Skrevet 10. august 2004 Ang. hastighet: Tror ikke hastighetsforskjellen mellom " og ' er så voldsomt stor, med mindre du kjører det i en while-løkke som er stor nok til å pushe sidegenereringstiden over 10-20 sekunder.
Lokaltog Skrevet 10. august 2004 Skrevet 10. august 2004 Ang. hastighet: Tror ikke hastighetsforskjellen mellom " og ' er så voldsomt stor, med mindre du kjører det i en while-løkke som er stor nok til å pushe sidegenereringstiden over 10-20 sekunder. Riktig det. Men uansett, er ålreit å legge seg til vanen.. Jeg blir iallefall fryktelig lei av å escape HTML-kode.
jorgis Skrevet 10. august 2004 Skrevet 10. august 2004 (endret) Vil si det er lettere å gjøre (f.eks.) slik: echo "<a href=\"$var\">$var2</a>"; enn echo '<a href="' . $var . '">' . $var2 . '</a>'; uansett hvor mye raskere det enn er. Vil si det er viktigere å skrive på en måte man selv finner lett, enn at sidegenereringstiden går ned med 1ms eller så. Endret 10. august 2004 av jorgis
Lokaltog Skrevet 10. august 2004 Skrevet 10. august 2004 Det er jeg helt enig i! Men når man ikke har variabler som skal settes inn i koden mener jeg at det er enklere å bruke ' så du slipper å escape HTML-kode unødvendig.. Enig?
jorgis Skrevet 10. august 2004 Skrevet 10. august 2004 (endret) Jepp. Har vel egentlig ikke sagt noe annet. Endret 10. august 2004 av jorgis
dabear Skrevet 10. august 2004 Skrevet 10. august 2004 for å gjøre koden kjappere kan man istedet skrive: <?php $from = array('#', '-',' 'c','s'); $to = array('<td bgcolor="#000000"> <td>', '<td bgcolor="#FFFFFF"> <td>', '<td bgcolor="#0000FF"> <td>', '<td bgcolor="#FF0000"> <td>' ); $retval = str_replace($from, $to, $retval); ?>
wacie Skrevet 10. august 2004 Forfatter Skrevet 10. august 2004 når jeg prøvde : <? $map = file( 'map.txt' ); $retval = "<table>"; foreach ( $map as $line ) { $retval .= "<tr>"; for( $i = 0; $i < strlen( $line ) + 1; $i++ ) { $char = $line{$i}; switch ( $char ) { case "#": $retval .= "<td bgcolor=\"#000000\">#</td>"; break; case "-": $retval .= "<td bgcolor=\"#FFFFFF\">-</td>"; break; case "c": $retval .= "<td bgcolor=\"#0000FF\">c</td>"; break; case "s": $retval .= "<td bgcolor=\"#FF0000\">s</td>"; break; } } $retval .= "</tr>\n"; } $retval .= "</table>"; ?> fikk jeg opp: Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11 Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11 Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11 Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11 Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11 Notice: Uninitialized string offset: 7 in C:\Web\htdocs\map\index.php on line 11
Lokaltog Skrevet 10. august 2004 Skrevet 10. august 2004 Hvis koden fungerer som den skal er notices noe du ikke trenger bry deg voldsomt mye over. Du kan slå den av vha. error_reporting() dersom du ønsker det.
wacie Skrevet 10. august 2004 Forfatter Skrevet 10. august 2004 jeg får bare opp det, ingen tabeller eller noe annet..
magh Skrevet 10. august 2004 Skrevet 10. august 2004 lokaltog, jorgis: Hvordan skal man bruke str_replace her? Eksempler? Trådstarter: Har du lagt kartet i en fil kalt "map.txt" og plassert den i samme mappe som scriptet? Siden ingenting dukker opp. Ordne "Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11" ved å erstatte for( $i = 0; $i < strlen( $line ) + 1; $i++ ) med for( $i = 0; $i < strlen( $line ); $i++ ) Nå skal det funke helt fint.
wacie Skrevet 10. august 2004 Forfatter Skrevet 10. august 2004 jeg endret det til sånn du sa, men nå får jeg opp ingen ting. map.txt ligger i den samme mappen som .php filen.
Lokaltog Skrevet 10. august 2004 Skrevet 10. august 2004 Har nevnt det med 2 eksempler over, men.. Vi tar det med teskje: <?php $contents = file('map.txt') or die('Kunne ikke lese fra tekstfil.'); echo('<table>'); foreach($contents as $retval) { echo('<tr>'); $retval = str_replace('#', '<td bgcolor="#000000"> <td>', $retval); $retval = str_replace('-', '<td bgcolor="#FFFFFF"> <td>', $retval); $retval = str_replace('c', '<td bgcolor="#0000FF"> <td>', $retval); $retval = str_replace('s', '<td bgcolor="#FF0000"> <td>', $retval); echo($retval); echo('</tr>'); } echo('</table>'); ?> It's As Easy As That! (Garanterer ikke bugfri kode)
magh Skrevet 10. august 2004 Skrevet 10. august 2004 jeg endret det til sånn du sa, men nå får jeg opp ingen ting. map.txt ligger i den samme mappen som .php filen. Hvordan ser scriptet ditt ut?
wacie Skrevet 10. august 2004 Forfatter Skrevet 10. august 2004 <? $map = file( 'map.txt' ); $retval = "<table>"; foreach ( $map as $line ) { $retval .= "<tr>"; for( $i = 0; $i < strlen( $line ); $i++ ) { $char = $line{$i}; switch ( $char ) { case "#": $retval .= "<td bgcolor=\"#000000\">#</td>"; break; case "-": $retval .= "<td bgcolor=\"#FFFFFF\">-</td>"; break; case "c": $retval .= "<td bgcolor=\"#0000FF\">c</td>"; break; case "s": $retval .= "<td bgcolor=\"#FF0000\">s</td>"; break; } } $retval .= "</tr>\n"; } $retval .= "</table>"; ?> Sånn ser det ut.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå