[PHP] preg_replace_callback output vooraan?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • eth0
  • Registratie: Mei 2002
  • Laatst online: 15-09 22:14
Ik heb een probleem met de functie preg_replace_callback.

PHP code ter verduidelijking:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

$string = "tekst ZXX111XXY meer tekst.";
$pattern = '/ZXX(.*)XXY/';
$replacement = 'BLAAT';

echo "Orginele string: $string<br /><br />";

echo "preg_replace: ";

echo preg_replace($pattern, $replacement, $string);

echo "<br /><br />preg_replace_callback: ";

echo preg_replace_callback($pattern, replace, $string);

function replace() { echo "BLAAT"; }

?>

Output van script:

code:
1
2
3
4
5
Orginele string: tekst ZXX111XXY meer tekst.

preg_replace: tekst BLAAT meer tekst.

preg_replace_callback: BLAATtekst meer tekst.

Zoals je ziet is de output verschillend, met preg_replace_callback komt de vervangende tekst voor aan te staan. ipv in de tekst op de orginele postitie zoals bij preg_replace.
Ik moet preg_replace_callback gebruiken om dit het orginele script de tekst afvangt en verder verwerkt voor dynamische output welke in een functie zit. Maar dit terzijde.

Waarom komt de tekst voor aan te staan bij preg_replace_callback?

Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 20:37
je moet denk ik
code:
1
return "BLAAT";
binnen replace() doen

[ Voor 15% gewijzigd door OnTracK op 07-11-2006 11:12 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Waar staat je functie 'replace' en wat doet die?

Voor de handigheid maar even een quoteje van php.net:
The behavior of this function is almost identical to preg_replace(), except for the fact that instead of replacement parameter, one should specify a callback that will be called and passed an array of matched elements in the subject string. The callback should return the replacement string. See preg_replace() for description of other parameters.

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • eth0
  • Registratie: Mei 2002
  • Laatst online: 15-09 22:14
OnTracK schreef op dinsdag 07 november 2006 @ 11:11:
je moet denk ik
code:
1
return "BLAAT";
binnen replace() doen
idd, dan is de output wel correct.

Acties:
  • 0 Henk 'm!

  • eth0
  • Registratie: Mei 2002
  • Laatst online: 15-09 22:14
Maar een return stop de functie meteen. Dus als er andere code in de fuctie staat, dan wordt tie dus niet uit gevoerd. Ook niet als je dat ook in een andere fuctie zet, zoals hieronder:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

$string = "tekst ZXX111XXY meer tekst.";
$pattern = '/ZXX(.*)XXY/';
$replacement = 'BLAAT';

echo "Orginele string: $string<br /><br />";

echo "preg_replace: ";

echo preg_replace($pattern, $replacement, $string);

echo "<br /><br />preg_replace_callback: ";

echo preg_replace_callback($pattern, replace, $string);

function replace() { return blaat(); }

function blaat() {
    
    echo "BLA";
    echo "AT";
}

?>


En al zou je van deze echo's return maken, dan krijg je alleen BLA terug.

PHP:
1
2
3
4
5
function blaat() {
    
    return "BLA";
    return "AT";
}

[ Voor 11% gewijzigd door eth0 op 07-11-2006 11:33 ]


Acties:
  • 0 Henk 'm!

  • Theuno
  • Registratie: Juni 2001
  • Laatst online: 20:37

Theuno

Da Devil Crew

Het verschil zit hem erin dat een return de waarde teruggeeft aan de functie die de functie aangeroepen had. Waarna deze functie er dus vrolijk mee verder kan rekenen en werken.
Een echo stuurt het ding naar de output, en geeft geen waarde terug aan de aanvragende functie.

Een return geeft tevens het einde van een functie aan. Hier is het denk ik even aan te raden om dat dit te doen:

PHP:
1
2
3
4
5
function blaat() {
    $string = "BLA";
    $string .= "AT";
    return $string;  
}

[ Voor 28% gewijzigd door Theuno op 07-11-2006 11:34 ]

Theuno - Da Devil Crew - Een programmeur is iemand die koffie omzet in software...
Nu nog betere koffie...


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

eth0 schreef op dinsdag 07 november 2006 @ 11:30:
Maar een return stop de functie meteen. Dus als er andere code in de fuctie staat, dan wordt tie dus niet uit gevoerd. Ook niet als je dat ook in een andere fuctie zet, zoals hieronder:
[...]
En al zou je van deze echo's return maken, dan krijg je alleen BLA terug.
Ooit van string concatenation gehoord :? (je weet wel, met zo'n . in php)

Acties:
  • 0 Henk 'm!

  • Theuno
  • Registratie: Juni 2001
  • Laatst online: 20:37

Theuno

Da Devil Crew

ACM schreef op dinsdag 07 november 2006 @ 11:34:
[...]


Ooit van string concatenation gehoord :? (je weet wel, met zo'n . in php)
http://nl2.php.net/manual/en/language.operators.string.php

Theuno - Da Devil Crew - Een programmeur is iemand die koffie omzet in software...
Nu nog betere koffie...

Pagina: 1