PHP使用键值对格式化字符串

@bruce  July 14, 2020

Python基于字典的字符串格式化如下:

person = {'name':'bruce', 'number':'56778'}
print("%(name)'s phone number is %(number)" % person)

使用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("%(name)s's phone number is %(number)08d", array('name' => 'bruce', 'number' => '56778'));

添加新评论