login  Naam:   Wachtwoord: 
Registreer je!
 Forum

functions gebruiken in strings

Offline NVZ - 20/04/2009 09:37 (laatste wijziging 20/04/2009 09:38)
Avatar van NVZLid heey mede web-developers!

Ik heb even een vraagje waar ik even zo snel niet uitkom. Ik wil een reguliere expressie schrijven die diverse tags vervangt.
Zo kwam ik tot het volgende:

  1. $array = array('naam' => 'Dummy', 'tag' => 'testing..');
  2. $label = "Beste {naam}, {tag}";
  3. $label = preg_replace("/({\/?)(\w+)([^}]*})/e", $array['\\2'], $label);

Deze zoekt naar een match en moet vervolgens kijken of hij de bijbehorende waarde kan krijgen om de tag daarmee te vervangen.

Ik kan natuurlijk met een foreach loop door de array heen, maar dit leek me een betere methode..

Het probleem is echter dat de bovenstaande code niet werkt. Je kan niet zomaar een array opgeven als tweede parameter.
Wat wel werkt is het volgende:

  1. class test
  2. {
  3. function createLabel($label)
  4. {
  5. $label = preg_replace("/({\/?)(\w+)([^}]*})/e", "getValue('\\2')", $label);
  6.  
  7. return $label;
  8. }
  9. }
  10.  
  11. function getValue($key)
  12. {
  13. $array = array('test' => 'value', 'eentje' => 'testing..');
  14. return $array[$key];
  15. }

Dus deze oplossing is wel okay, Wat alleen niet zo mooi is dat mijn createLabel() in m'n klasse staat en getValue() niet. Omdat je geen $this-> mee kan geven in de string van de preg_replace() kan ik de getValue() niet in de klasse plaatsen.

Iemand enig idee hoe ik dit op kan lossen?

Vr gr,

Nico

1 antwoord

Gesponsorde links
Offline Sitebase - 20/04/2009 15:10
Avatar van Sitebase PHP expert Probeer het volgende eens:

  1. <?php
  2.  
  3. class test
  4. {
  5. function createLabel($label)
  6. {
  7. $label = preg_replace("/({\/?)(\w+)([^}]*})/e", "self::getValue('\\2')", $label);
  8.  
  9. return $label;
  10. }
  11.  
  12. function getValue($key)
  13. {
  14. $array = array('naam' => 'Wim', 'eentje' => 'testing..');
  15. return $array[$key];
  16. }
  17.  
  18. }
  19.  
  20. echo test::createLabel("Beste {naam}, {eentje}");
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.211s