Name PHP specifiers in printf() strings

后端 未结 4 2176
情书的邮戳
情书的邮戳 2021-02-19 18:47

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);
4条回答
  •  太阳男子
    2021-02-19 19:09

    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.

提交回复
热议问题