Support the ongoing development of Laravel.io →
Input
Last updated 1 month ago.
0
$values = ['name' => 'Ricardo', 'drink' => 'coffee'];
$str = "Hello " . $values['name'] . ".. Do you like " . $values['drink'] . "?";

echo $str;

Output: "Hello Ricardo.. Do you like coffee?"

Your helpers function can do likewise as what that $str assignment is doing - learn about string concatenation in PHP.

Last updated 1 month ago.
0
$str = 'Hello :name. Do you like :drink?';
echo str_replace([':name', ':drink'], ['Ricardo', 'Coffee'], $str);
Last updated 1 month ago.
0

Good.. But it has to be dynamic .. So.. My solution is..

function vnsprintf( $format, array $data)
{
    preg_match_all( '/ (?<!%) % ( (?: [[:alpha:]_-][[:alnum:]_-]* | ([-+])? [0-9]+ (?(2) (?:\.[0-9]+)? | \.[0-9]+ ) ) ) \$ [-+]? \'? .? -? [0-9]* (\.[0-9]+)? \w/x', $format, $match, PREG_SET_ORDER | PREG_OFFSET_CAPTURE);
    $offset = 0;
    $keys = array_keys($data);
    foreach ( $match as &$value )
    {
        if ( ( $key = array_search( $value[1][0], $keys) ) !== FALSE || ( is_numeric( $value[1][0]) && ( $key = array_search( (int)$value[1][0], $keys) ) !== FALSE ) ) {
            $len = strlen( $value[1][0]);
            $format = substr_replace( $format, 1 + $key, $offset + $value[1][1], $len);
            $offset -= $len - strlen( $key);
        }
    }
    return vsprintf( $format, $data);
}


$str = "Hello %name\$s..Do you like %drink\$s?"; 
$values = array('name' => 'Ricardo', 'drink' => 'coffee');

echo vnsprintf( $str, $values);
// output: Hello Ricardo ..Do you like coffee?
Last updated 1 month ago.
0

This should allow your replaced text in your string and the replacing text in your arrays to be in any order.

$replace = [':drink' => 'coffee', ':name' => 'Ricardo'];
$str = 'Hi my name is :name. I like to drink :drink.';

echo str_replace_dynamic($replace, $str);

function str_replace_dynamic(array $replace, $string) { 
   return str_replace(array_keys($replace), array_values($replace), $string);    
}
Last updated 1 month ago.
0

@aheinzm Your answer is even more clean than the correct answer. Looks so nice.

Last updated 4 years ago.
0

Sign in to participate in this thread!

Full Stack Europe

Your banner here too?

Moderators

We'd like to thank these amazing companies for supporting us

Your logo here?

The Laravel portal for problem solving, knowledge sharing and community building.

© 2022 Laravel.io - All rights reserved.