wacie Skrevet 10. august 2004 Del 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 Lenke til kommentar
Lokaltog Skrevet 10. august 2004 Del Skrevet 10. august 2004 http://no2.php.net/str_replace Lenke til kommentar
magh Skrevet 10. august 2004 Del 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>"; Lenke til kommentar
jorgis Skrevet 10. august 2004 Del 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. Lenke til kommentar
Lokaltog Skrevet 10. august 2004 Del 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); ?> Lenke til kommentar
jorgis Skrevet 10. august 2004 Del 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. Lenke til kommentar
Lokaltog Skrevet 10. august 2004 Del 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. Lenke til kommentar
jorgis Skrevet 10. august 2004 Del 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 Lenke til kommentar
Lokaltog Skrevet 10. august 2004 Del 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? Lenke til kommentar
jorgis Skrevet 10. august 2004 Del Skrevet 10. august 2004 (endret) Jepp. Har vel egentlig ikke sagt noe annet. Endret 10. august 2004 av jorgis Lenke til kommentar
dabear Skrevet 10. august 2004 Del 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); ?> Lenke til kommentar
wacie Skrevet 10. august 2004 Forfatter Del 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 Lenke til kommentar
Lokaltog Skrevet 10. august 2004 Del 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. Lenke til kommentar
wacie Skrevet 10. august 2004 Forfatter Del Skrevet 10. august 2004 jeg får bare opp det, ingen tabeller eller noe annet.. Lenke til kommentar
magh Skrevet 10. august 2004 Del 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. Lenke til kommentar
wacie Skrevet 10. august 2004 Forfatter Del 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. Lenke til kommentar
Lokaltog Skrevet 10. august 2004 Del 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) Lenke til kommentar
magh Skrevet 10. august 2004 Del 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? Lenke til kommentar
wacie Skrevet 10. august 2004 Forfatter Del 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. Lenke til kommentar
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å