Frank: Stringfolge durch andere ersetzen

Hallo zusammen!

Ich hab folgendes Problem: Ich möchte gerne in einer Tabelle eine bestimmt Spalte farblich hervorheben.

Die Tabelle von einer externen Seite und wurde so eingelesen:
$ding = file ('http://www.tt-info.de/forum/content/tabelle.php?liga_nr=204');

Jetzt möchte ich in dieser Tabelle die Spalte, in der der Verein "XYZ" enthalten ist, den Text so ersetzen, dass diese Spalte farbig markiert wird.
Heißt also ich habe einen Text, der ungefähr so aussieht:
<tr>
  <td...>...</td>
  <td...>XYZ...</td>
  ...
</tr>

Hat jemand eine gute Idee, wie ich innerhalb eines tr-Tags, in dem der Verein XYZ enthalten ist, alle <td...> durch <td bgcolor=#xxxx" ...> ersetzen kann?

Gruß,
Frank

  1. Hallo

    Ich hab folgendes Problem: Ich möchte gerne in einer Tabelle eine bestimmt Spalte farblich hervorheben.

    Hat jemand eine gute Idee, wie ich innerhalb eines tr-Tags, in dem der Verein XYZ enthalten ist, alle <td...> durch <td bgcolor=#xxxx" ...> ersetzen kann?

      
    if ($verein=="FC Posemuckl")  
       {  
       echo "<td bgcolor=\"#xxxxxx\" ...>";  
       }  
    else  
       {  
       echo "<td...>";  
       }  
    
    

    Allerdings ist die Verwendung von HTML-Attributen zur Gestaltung (hier: bgcolor="") nicht mehr zeitgemäß. Dazu ist CSS da. Damit kannst du die Angaben zur Gestaltung in einer externen Datei bestimmen, die beim ersten Aufruf der Seite übermittelt wird, und dann bei jedem weiteren Aufruf der Seite bereits im Cache des Browsers vorliegt.

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
  2. Schau mal nach regulären Ausdrücken

    1. Hallo Marc.

      Schau mal nach regulären Ausdrücken

      Das kann nie schaden, wäre hier aber vermutlich zuviel des Guten, da hier str_replace bereits genügen kann.

      Einen schönen Mittwoch noch.

      Gruß, Ashura

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
      1. Ich hatte das vorgschlagen, weil meines Wissens nach die preg-Funktionen schneller sind. Vom Aufwand her - naja, er braucht ja nur ein Pattern...

        1. hi,

          Ich hatte das vorgschlagen, weil meines Wissens nach die preg-Funktionen schneller sind.

          Nein, "einfache" Stringvergleiche sind idR. schneller, als Mustersuche.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
        2. Hallo Marc.

          Ich hatte das vorgschlagen, weil meines Wissens nach die preg-Funktionen schneller sind.

          Dein Wissen entspricht nicht dem meinigen. Stringfunktionen sind per se schneller als reguläre Ausdrücke. Benchmarks dazu finden sich im hiesigen Archiv mehr als genug.

          Vom Aufwand her - naja, er braucht ja nur ein Pattern...

          Bzw. eine einfache Zeichenkette, ja.

          Einen schönen Mittwoch noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
  3. Dass man einfach Strings durch andere ersetzen kann, ist mir auch klar, das Problem ist aber, dass es Sporttabellen so an sich haben, dass man nie die Platzierung der Mannschaft weiß, es kann also sein, dass der Tag lautet:
    <tr>
     <td>1.</td>
     <td>XYZ</td>
    </tr>

    oder

    <tr>
     <td>5.</td>
     <td>XYZy</td>
    </tr>

    Ich weiß ja nur, dass irgendwo XYZ drinsteht und will dann innerhalb des <tr>-Tags alle <td>s durch andere <td>s ersetzen.

    Dafür nutzt mir ein einfaches replace gar nix weil ich gar nicht weiß, was genau ich ersetzen will sondern nur wie es ungefähr aussieht.
    Wenn jetzt jemand schreibt, wäre es außerdem gut, einen konkreten Lösungsvorschlag zu haben und nicht zu schreiben: lies dir die 50 Seiten durch, dann kannst du's! ;-)

    1. Hallo Frank.

      […] es kann also sein, dass der Tag lautet:
      <tr>
      <td>1.</td>
      <td>XYZ</td>
      </tr>

      oder

      <tr>
      <td>5.</td>
      <td>XYZy</td>
      </tr>

      Ich weiß ja nur, dass irgendwo XYZ drinsteht und will dann innerhalb des <tr>-Tags alle <td>s durch andere <td>s ersetzen.

      Ich sehe oben zweimalig das Muster „<td>XYZ“.

      Dafür nutzt mir ein einfaches replace gar nix weil ich gar nicht weiß, was genau ich ersetzen will sondern nur wie es ungefähr aussieht.

      Erwähntes Muster eignet sich hervorragend für str_replace.

      Einen schönen Mittwoch noch.

      Gruß, Ashura

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
      1. Ja, für den EINEN <td>-Tag, aber ich will ja auch den <td>-Tag mit der Zahl durch einen anderen ersetzen, und der ist halt immer unterschiedlich, genauso wie danach die weiteren <td>-Tags mit den Punkteständen.

        Ich will z.B. aus
        <tr>
         <td>1.</td>
         <td>XYZ</td>
         <td>10:0</td>
        </tr>

        etwas machen können wie
        <tr>
         <td bgcolor="#FFFFFF">1.</td>
         <td bgcolor="#FFFFFF">XYZ</td>
         <td bgcolor="#FFFFFF">10:0</td>
        </tr>

        aber auch genauso aus
        <tr>
         <td>10.</td>
         <td>XYZ</td>
         <td>0:18</td>
        </tr>

        so etwas:
        <tr>
         <td bgcolor="#FFFFFF">10.</td>
         <td bgcolor="#FFFFFF">XYZ</td>
         <td bgcolor="#FFFFFF">0:18</td>
        </tr>

        1. Hallo Frank.

          Ich will z.B. aus
          <tr>
          <td>1.</td>
          <td>XYZ</td>
          <td>10:0</td>
          </tr>

          etwas machen können wie
          <tr>
          <td bgcolor="#FFFFFF">1.</td>
          <td bgcolor="#FFFFFF">XYZ</td>
          <td bgcolor="#FFFFFF">10:0</td>
          </tr>

          Ziemlich unsinnig. Besser wäre es, wenn du dem tr-Element eine Klasse verpasst und damit per CSS gleich die gesamte Zeile optisch hervorhebst.

          Bewerkstelligen könntest du dies, indem du mit Hilfe von strpos in der gesamten Zeichenkette nach „<tr>“ suchst und dir diese Position erst einmal merkst. Als nächstes suchst du, ausgehend von der Position von „<tr>“, auf gleiche Art und Weise nach „</tr>“ und merkst dir auch diese Position.

          Nun suchst du innerhalb dieser Teilzeichenkette nach „<td>XYZ“ und ersetzt bei einem Vorkommen beispielsweise „<tr>“ durch „<tr class="verein>“. Hierbei bietet sich, da du ja die Position von „<tr>“ bereits weißt, aber eher substr_replace an.

          Einen schönen Mittwoch noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]