I am learning the language php
. I have two functions and I want to connect these two and show them in one output php
.
<?php
function link_follow($id)
{
$title = '';
$slug = '';
if ( $id == 44 ){
$title = 'Follow';
$slug = 'link/'.$id;
$read = '<a href="follow/'. $slug .'">'. $title .' : '.$id.'</a>';
return $read;
}
return '-';
}
function content_html($string)
{
$string = preg_replace('/[FOLLOW_LINK id=(d+)]/i', link_follow('$1') , $string);
return $string;
}
$content= 'it is a test. Link: [FOLLOW_LINK id=44]';
echo content_html($content);
?>
out (html);
it is a test. Link: -
But i want to show the output (html
) as below:
it is a test. Link: <a href="follow/link/44">Follow : 44</a>
It should show this code <a href="follow/link/44">Follow : 44</a>
.
I think this code preg_replace
does not work.
2
Answers
Because the string
'$1'
you passed to the function has no special meaning, you should use thepreg_replace_callback
function:doesn’t work because link_follow(‘$1’) is executed before the replacement and since link_follow(‘$1’) will return ‘-‘, also the replace() will result in ‘-‘.
Also if you pass ‘$1’ instead of link_follow(‘$1’) as the second parameter, the substitution will result as the original string with the search pattern changed to the value that $1 represents (‘it is a test. Link: 44’ in the example).
A possible alternative solution is to use preg_match() which accepts as third parameter an array where the matches are stored, $matches[0] will contain the $0 match and $matches[1] will contain your $1 match: