preg_replace backreference value as a key to array

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Dave

    preg_replace backreference value as a key to array

    Hi,

    This is an interesting problem I'm faced with. I have been trying all sorts
    of functions to fix it and my last resort is to ask you guys and girls.

    I have an array:
    $arr([3]=>"aaa",[104]=>"bbb",[345]=>"ccc",[n]=>"etc");
    $html='<html>.. ..<a href="page.php? var=3">3</a><a
    href="page.php? var=345">345</a...<a
    href="page.php? var=n">n</a>...</html>';

    I'm trying to get a value from URLs in HTML and use it as a key to output
    the value of $arr.
    i.e. matching the: /page.php?var=(3 45)/ will output: "ccc";

    Here is what I've tried but can't quite get there:
    $html=preg_repl ace('/(href="page\.ph p\?)(var=)([0-9]+)/si','\\1var=' .
    eval('\$c=\'\3\ '; return \$c;'),$html);
    Outputs the matched var: i.e. 345, but:

    $html=preg_repl ace('/(href="page\.ph p\?)(var=)([0-9]+)/si','\\1var=' .
    eval('\$c=\'\3\ '; return \$arr[\$c];'),$html);
    Won't output anything.

    I tried to see if the backreferencfe value is really what it seems
    (integer), but when I do:
    $html=preg_repl ace('/(href="page\.ph p\?)(var=)([0-9]+)/si','\\1var=' .
    eval('\$c=\'\3\ '; \$c=gettype(\$c ); return \$c;'),$html);
    it shows it's a string. If I try: \$c*1, outputs is 0. If I try
    settype(\$c,"in teger"), the output again is 0.

    Another strange thing. This: "return \$c;" returns the 345, but return
    strlen(\$c); returns 2.

    Please, save me from this madness! :)

    Thanks

    Dave


  • Chung Leong

    #2
    Re: preg_replace backreference value as a key to array

    Dave wrote:
    Hi,
    >
    This is an interesting problem I'm faced with. I have been trying all sorts
    of functions to fix it and my last resort is to ask you guys and girls.
    >
    I have an array:
    $arr([3]=>"aaa",[104]=>"bbb",[345]=>"ccc",[n]=>"etc");
    $html='<html>.. ..<a href="page.php? var=3">3</a><a
    href="page.php? var=345">345</a...<a
    href="page.php? var=n">n</a>...</html>';
    >
    I'm trying to get a value from URLs in HTML and use it as a key to output
    the value of $arr.
    i.e. matching the: /page.php?var=(3 45)/ will output: "ccc";
    >
    Here is what I've tried but can't quite get there:
    $html=preg_repl ace('/(href="page\.ph p\?)(var=)([0-9]+)/si','\\1var=' .
    eval('\$c=\'\3\ '; return \$c;'),$html);
    Outputs the matched var: i.e. 345, but:
    >
    $html=preg_repl ace('/(href="page\.ph p\?)(var=)([0-9]+)/si','\\1var=' .
    eval('\$c=\'\3\ '; return \$arr[\$c];'),$html);
    Won't output anything.
    >
    I tried to see if the backreferencfe value is really what it seems
    (integer), but when I do:
    $html=preg_repl ace('/(href="page\.ph p\?)(var=)([0-9]+)/si','\\1var=' .
    eval('\$c=\'\3\ '; \$c=gettype(\$c ); return \$c;'),$html);
    it shows it's a string. If I try: \$c*1, outputs is 0. If I try
    settype(\$c,"in teger"), the output again is 0.
    >
    Another strange thing. This: "return \$c;" returns the 345, but return
    strlen(\$c); returns 2.
    >
    Please, save me from this madness! :)
    Read the following:




    Comment

    Working...