Voting

: three plus five?
(Example: nine)

The Note You're Voting On

php at mikeboers dot com
16 years ago
And continuing on the same theme of a key-based sprintf...

I'm roughly (I can see a couple cases where it comes out wierd) copying the syntax of Python's string formatting with a dictionary. The improvement over the several past attempts is that this one still respects all of the formating options, as you can see in my example.

And the error handling is really crappy (just an echo). I just threw this together so do with it what you will. =]

<?php

function sprintf_array($string, $array)
{
$keys = array_keys($array);
$keysmap = array_flip($keys);
$values = array_values($array);

while (
preg_match('/%\(([a-zA-Z0-9_ -]+)\)/', $string, $m))
{
if (!isset(
$keysmap[$m[1]]))
{
echo
"No key $m[1]\n";
return
false;
}

$string = str_replace($m[0], '%' . ($keysmap[$m[1]] + 1) . '$', $string);
}

array_unshift($values, $string);
var_dump($values);
return
call_user_func_array('sprintf', $values);
}

echo
sprintf_array('4 digit padded number: %(num)04d ', array('num' => 42));

?>

Cheers!

<< Back to user notes page

To Top