好问题!
通过使用正则表达式,您可以自己滚动自己而不用太麻烦.我基于这个实现,就是调用vsprintf
的想法,它最接近内置的printf函数系列中的所述目标:
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); }
去测试:
$foo = array('age' => 5,'name' => 'john'); echo vsprintf_named("%(name)s is %(age)02d",$foo);
更新:我的初始实现是非常lambda快乐.结果是一个超级基本的foreach就足够了,这也使得函数可以在PHP> = 4.1中使用(不是100%确定具体的版本,而应该在那里).