Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP associative array values replace string variable

I have a string as:

$string = "My name is {name}. I live in {detail.country} and age is {detail.age}";

and I have an array like that and it will be always in that format.

$array = array(
   'name' => 'Jon',
   'detail' => array(
     'country' => 'India',
     'age' => '25'
  )
);

and the expected output should be like :

My name is Jon. I live in India and age is 25

So far I tried with the following method:

$string = str_replace(array('{name}','{detail.country}','{detail.age}'), array($array['name'],$array['detail']['country'],$array['detail']['age']));

But the thing is we can not use the plain text of string variable. It should be dynamic on the basis of the array keys.

like image 671
Lalit Mohan Avatar asked Oct 26 '25 06:10

Lalit Mohan


1 Answers

You can use preg_replace_callback() for a dynamic replacement:

$string = preg_replace_callback('/{([\w.]+)}/', function($matches) use ($array) {
    $keys = explode('.', $matches[1]);
    $replacement = '';

    if (sizeof($keys) === 1) {
        $replacement = $array[$keys[0]];
    } else {
        $replacement = $array;

        foreach ($keys as $key) {
            $replacement = $replacement[$key];
        }
    }

    return $replacement;
}, $string);

It also exists preg_replace() but the above one allows matches processing.

like image 104
Kévin Bibollet Avatar answered Oct 28 '25 22:10

Kévin Bibollet



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!