[PHP] preg_replace in arrays

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Nou ben ik een vrij grote noob op het gebied van preg_replace (hier heb je bijna een expert opzich voor nodig :P), maar een beetje normaal scriptje lukt nog wel met help en google.

Het volgende echter niet:

Nu heb ik dit:
PHP:
1
2
3
4
$pattern = array("'\[img=(\d)\]'si");
$replace = array("[img]'images/\\1.jpg'[/img]");

$content = preg_replace($pattern, $replace, $content);


Ik werk met nummers dus [img=1] wordt [img]'1.jpg'[/img]
Nu wil ik eigenlijk bij die 1 een waarde uit de database opzoeken en die er in poten.

tabelletje
id naam
1 afbeelding.jpg
2 nog_een.jpg
3 en_nog_een.jpg

Dus [img=2] moet worden [img]'nog_een.jpg'[/img] :? Kan dit?

Waar ik zelf aan dacht is of het misschien mogelijk is het resultaat in een array te zetten, dus $content wordt dan een array, waarbij alle [img=?] zijn vervangen door een query. Dan kan ik die array af gaan en verzin ik er nog wat bij zodat het gewenste resultaat verschijnt.

Of misschien is er een andere oplossing, maar welke...?

Misschien had het topic beter kunnen zijn: preg_replace: pattern vervangen door tabel waarde.

[ Voor 10% gewijzigd door Fles op 12-07-2004 15:56 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dit kan je oplossen door een functie het werk te laten doen:

1. Voeg de "e" modifier toe, hierdoor kan je functies laten uitvoeren binnen preg_replace
2. Maak een functie die bij het opgegevens $id de bijbehorende gegevens uit de database haalt, en de hele img tag met juiste href terug geeft.
PHP:
1
2
3
4
5
6
7
8
9
function mijnfunctie($id)
{
//Haal de gegevens op met opgegeven $id.

//let op: controleer eerst of het een getal is,
//en of er wel een resultaat uit de database komt.

return "[img]\"images/".$database_result["naam"]."\"[/img]";
}

3. Verander je replace:
PHP:
1
preg_replace($pattern, "mijnfunctie(\"$1\")",$data);


Edit:
Ik weet dat de highlight er niet zo lekker uitziet, maar zelf gebruik ik dit ook, en het werkt gewoon zoals het moet :) (php 4.3.4).
Graveheart schreef op 12 juli 2004 @ 16:11:
Dit is perfect!

Maar je zegt dat je de e modifier moet toevoegen, maar die zie ik niet in jou code...
Dat klopt :)
Maar dat komt omdat die onder "$pattern" valt, en die heb ik voor het gemak maar weggelaten.
Wat je dus als $pattern krijgt is dit:
code:
1
"'\[img=(\d)\]'sie"

[ Voor 140% gewijzigd door Verwijderd op 12-07-2004 16:19 ]


Acties:
  • 0 Henk 'm!

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Dit is perfect!

Maar je zegt dat je de e modifier moet toevoegen, maar die zie ik niet in jou code...

Zelf heb ik hem wel toegevoegd en het werkt helemaal top.
Dat klopt
Maar dat komt omdat die onder "$pattern" valt, en die heb ik voor het gemak maar weggelaten.
Wat je dus als $pattern krijgt is dit:

code:
1

"'\[img=(\d)\]'sie"
Oh ja tuurlijk :P. Maar goed, ik had hem al werkend :)

[ Voor 73% gewijzigd door Fles op 12-07-2004 16:26 ]