PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Suchen und ersetzen mehrer Platzhalter in einem Textstring (https://www.php-resource.de/forum/php-developer-forum/26456-suchen-und-ersetzen-mehrer-platzhalter-in-einem-textstring.html)

weserweb 23-09-2003 21:57

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

Wurzel 23-09-2003 22:04

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">'

mrhappiness 23-09-2003 22:06

ein regulärer ausdruck vielleicht, der dir alles hinter ##- ersetzt, solang es sich um ziffernhandelt?

weserweb 23-09-2003 22:18

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

Wurzel 23-09-2003 22:26

str_replace ersetzt bei einem wert von 1 in ##-11 den roten teil => ##-11 , 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.

;)

mrhappiness 23-09-2003 22:28

k, ihr habt ja recht

weserweb 23-09-2003 22:37

@ 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!:D
danke!

Wurzel 23-09-2003 22:41

Zitat:

Original geschrieben von weserweb
.. und wieder ist einem verzweifelten geholfen worden!:D
danke!

*wurzel_sich_eine_träne_der_rührung_wegdrückt* :D

weserweb 23-09-2003 22:49

Zitat:

*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? :p

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:02 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG