Avatar billede zurekk Nybegynder
09. oktober 2007 - 16:06 Der er 16 kommentarer og
2 løsninger

preg_replace_callback flere params

Hej Eksperter,

Jeg skal bruge preg_replace_callback, men har det problem at jeg gerne vil have en parameter over i min anden funktion udover den som sendes automatisk.

Hvordan gøres dette?
Avatar billede nielle Nybegynder
09. oktober 2007 - 16:18 #1
Prøv at kigge lidt på denne her:

http://www.eksperten.dk/spm/798551

Der er da en mulig måde at gøre det på.
Avatar billede zurekk Nybegynder
09. oktober 2007 - 16:40 #2
Hmm, fik ikke rigtig fat i den =/

Giver lige et eksempel på min kode.

function one( $matches )
{
echo $myvar;
}

function two( $myvar )
{
preg_replace_callback( '//', 'one', $text );
}

Hvis svaret ligger i den anden tråde må du lige præcisere en smule :D
Avatar billede olebole Juniormester
09. oktober 2007 - 16:50 #3
<ole>

Antallet af parametre afhænger jo af antallet af paranteser i dit RegExp-mønster ... én parameter pr. parentes  :)

/mvh
</bole>
Avatar billede olebole Juniormester
09. oktober 2007 - 17:18 #4
http://dk2.php.net/manual/en/function.preg-replace-callback.php

- se andet eksempel:

<?php
// this text was used in 2002
// we want to get this up to date for 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// the callback function
function next_year($matches)
{
  // as usual: $matches[0] is the complete match
  // $matches[1] the match for the first subpattern
  // enclosed in '(...)' and so on
  return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
            "|(\d{2}/\d{2}/)(\d{4})|",
            "next_year",
            $text);

?>

Her indeholder $matches[1] og $matches[2] de to parametre, der anvendes i callback-funktionen
Avatar billede zurekk Nybegynder
09. oktober 2007 - 17:43 #5
Ja det er rigtigt, men jeg skal have en helt anden værdi med, en der kommer fra en variabel som man angiver i "two"
Avatar billede olebole Juniormester
09. oktober 2007 - 18:09 #6
Jeg tror, du må vise et eksempel  :)
Avatar billede olebole Juniormester
09. oktober 2007 - 18:09 #7
- et tydeligere end det forrige  ;o)
Avatar billede zurekk Nybegynder
09. oktober 2007 - 18:18 #8
Jamen det hele er sådan set i det første eksempel, jeg kører function "two", og i den bruger jeg en callback som bruger function "one", og jeg vil gerne kunne bruge $myvar som angives i "two", i "one" :)

$GLOBALS['myvar'] == $myvar;
Virker, men er ikke særligt pæn.
Avatar billede nielle Nybegynder
09. oktober 2007 - 18:31 #9
En preg_replace_callback() funktion kan kun tage en parameter - $matches.

Hvis du skal have andre parametre med, må du så der bliver vist i det lik jeg gav, liste dem ind ved siden af som global-erklærede variable.
Avatar billede zurekk Nybegynder
09. oktober 2007 - 18:49 #10
Kan de heller ikke, værdien skal komme fra two( $var ) og ende i one().

Men så bliver jeg vel nødt til at bruger $GLOBALS =/

Smid et svar, begge :)
Avatar billede nielle Nybegynder
09. oktober 2007 - 19:03 #11
Svar :^)
Avatar billede olebole Juniormester
10. oktober 2007 - 01:30 #12
Der er også denne løsning, som måske er lidt kønnere:

$sStr = "En eller anden streng, der skal replaces noget tekst i";

function myCallBackFunc($matches, $var) {
    return $matches[0].$var;
}
function doDaShit($s) {
    $bla = "(<-fundet ord)"; // Variabel, der skal med til callBack-funktionen
    $sPatt = "/d\wr/"; // RegExp-mønster
    return preg_replace_callback($sPatt, create_function('$matches', 'return myCallBackFunc($matches, "'.$bla.'");'), $s);
}

print doDaShit($sStr);

- men du skal _virkelig_ holde munden lige rundt om tungen, når du sætter gåseøjne i create_function-kaldet!
De 'yderste' gåseøjne _skal_ være enkelte - og strenge, der skal escapes, skal have dobbelte gåseøjne  :)
Avatar billede olebole Juniormester
10. oktober 2007 - 01:31 #13
- og et svar  :)
Avatar billede nielle Nybegynder
10. oktober 2007 - 07:05 #14
Ahh, snedigt :^)
Avatar billede zurekk Nybegynder
10. oktober 2007 - 14:27 #15
Tak til begge - jeg dele pointsne mellem jer, håber ikke du har noget imod det ole :)
Og tusind tak, det virker som det skal!
Avatar billede olebole Juniormester
10. oktober 2007 - 15:46 #16
Selvtak ... og nej, jeg er absolut ikke utilfreds med pointfordelingen  ;o)
Avatar billede nielle Nybegynder
10. oktober 2007 - 15:51 #17
Takker for point :^)

(selv om jeg synes at olebole burde have haft de fleste med '10/10-2007 01:30:59' :^)
Avatar billede zurekk Nybegynder
10. oktober 2007 - 16:59 #18
Well, 50 eller 70 points, whatever - right :D?

Det er vel tanken der tæller :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester