Suchen und ersetzen mehrer Platzhalter in einem Textstring

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Suchen und ersetzen mehrer Platzhalter in einem Textstring

    hallo,

    ich stecke fest.

    ich hole einen textstring ($text) aus db (der text für eine seite mit der id $id - im beispiel $id=184).
    in diesem string stehen platzhalter für bilder.
    die platzhalter sehen so aus: "##-1" für bild nummer 1, "##-2" für bild nummer 2 etc.

    ich lese dann die bilder-tabelle ein und stelle fest, ob bildnummern ($pic_num) für eine seite mit dieser id existieren.

    die verarbeitung soll dann in einer while-schleife laufen:
    PHP-Code:
    $sql mysql_query("SELECT pic_num FROM pages_pics WHERE page_id = '$id'"); 
        while (
    $row mysql_fetch_row($sql))
            {
            
    $pic_num $row[0];

            
    $bild_pfad "../../images/".$id."-".$pic_num.".jpg";

            if (
    file_exists($bild_pfad))
                {
                
    $bild "<img src='.$bild_pfad."'>";
                $text = str_replace("##-".$pic_num,$bild,$text);
                }
            } 
    ich bekomme bei z.b. 20 bildern und 2 platzhaltern dieses ergebnis:

    1) platzhalter ist "##-11" - ergebnis: <img src='../../images/own_pages/184-1.jpg'
    und ans bild angehängt die "1" (zweite ziffer aus "11")

    2) platzhalter ist "##-12" - ergebnis: <img src='../../images/own_pages/184-2.jpg'
    und ans bild angehängt die "2" (zweite ziffer aus "12")

    3) das ganze ist nicht sehr elegant, da für jedes bild der gesamte text geprüft werden muss.

    hat jemand einen tip, wie statt "bild-1" das gewünschte "bild-11" angezeigt wird?
    kann man das ganze besser formulieren?
    oder ist der ganze ansatz verkehrt?

    danke für jeden tip, wolfgang

  • #2
    a) entweder sortierst du die ids DESC, beginnst also mit den grössten zahlen

    ODER

    b) $text = str_replace("\"##-".$pic_num."\"","\"".$bild."\"",$text);
    => davon ausgehend, dass in $text steht '<img src="##-123">'
    Kissolino.com

    Kommentar


    • #3
      ein regulärer ausdruck vielleicht, der dir alles hinter ##- ersetzt, solang es sich um ziffernhandelt?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        wurzel war zuerst da und trägt den titel MASTER zu recht.

        das DESC hat es gebracht im ersten test.

        ich muss allerdings noch darüber nachdenken, warum.

        warum vor allen dingen die zweite ziffer frei im text angezeigt wurde.

        mrhappiness,

        ja, sicher besser, aber ich weiss (noch) nicht gut damit umzugehen.

        noch einmal zu meiner grundsätzlichen frage:
        ist dieser ansatz der richtige? x mal den ganzen text durchgehen?

        in jedem fall: herzlichen dank für die schnelle hilfe!
        wolfgang

        Kommentar


        • #5
          str_replace ersetzt bei einem wert von 1 in ##-11 den roten teil => [COLOR=crimson]##-1[/COLOR]1 , damit bleibt 1 über und steht hinter dem ersetzungstext
          bei DESC werden die höchsten werte zuerst geliefert, also 11 vor 1 ... jetzt klarer?

          ob ein preg_replace() schneller ist, müsstest du testen, in dem fall glaub ich nicht

          und anders als die ersetzung in der schleife durchzuführen, wirst du das nicht hinbekommen ... zumindest fällt mir spontan keine bessere lösung ein.

          Kissolino.com

          Kommentar


          • #6
            k, ihr habt ja recht
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              @ wurzel,

              jetzt vollkommen klar!!!

              die schleife werde ich so belassen, zumal es sich bei den texten um ca. 500 bis 800 wörter handelt.

              ich habe den code noch ein wenig geändert, um die verhältnisse deutlicher zu machen:
              PHP-Code:
              $replace "##-".$pic_num;
              $text str_replace($replace,$bild,$text); 
              und wieder ist einem verzweifelten geholfen worden!
              danke!

              Kommentar


              • #8
                Original geschrieben von weserweb
                .. und wieder ist einem verzweifelten geholfen worden!
                danke!
                *wurzel_sich_eine_träne_der_rührung_wegdrückt*
                Kissolino.com

                Kommentar


                • #9
                  *wurzel_sich_eine_träne_der_rührung_wegdrückt*
                  bin nunmehr selbst zutiefst gerührt.
                  soll das eine nacht der tränen werden?
                  vielleicht schliesst sich ja noch jemald an?

                  bitte thread schliessen, sonst wird's zu nass...

                  Kommentar

                  Lädt...
                  X