Is there a way in PHP to name my specifiers like in Python?
I want this in PHP:
$foo = array('name' => 24);
printf("%(name)d", $foo);
I couldn't find nothing related on google or in the php manual.
We can print the string using %s format specifier in printf function.
Nice question!
You can roll your own without too much trouble by working with regexes. I based the implementation on the idea of calling vsprintf
, which is closest to the stated goal among the built-in printf
family of functions:
function vsprintf_named($format, $args) {
$names = preg_match_all('/%\((.*?)\)/', $format, $matches, PREG_SET_ORDER);
$values = array();
foreach($matches as $match) {
$values[] = $args[$match[1]];
}
$format = preg_replace('/%\((.*?)\)/', '%', $format);
return vsprintf($format, $values);
}
To test:
$foo = array('age' => 5, 'name' => 'john');
echo vsprintf_named("%(name)s is %(age)02d", $foo);
Update: My initial implementation was very lambda-happy. Turns out a super basic foreach
will suffice, which also makes the function usable in PHP >= 4.1 (not 100% sure about the specific version, but should be around there).
See it in action.
Use strtr
:
$foo = array('%name%' => 24);
strtr("%name%", $foo); // 24
You could also do this:
"${foo['name']}"
Or this:
$name = 24;
"$name"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With