在数组的字符串中设置参数

时间:2011-11-15 10:24:19

标签: php arrays function

我有一个函数language($tag)需要一个文件lang.php,其中包含一个名为$lang的数组,其中包含一些参数。特别是字符串$lang['message']。在一些执行行之后,它返回$lang['message']

$ lang数组的定义如下:

$lang[$tag] = array(
    'message' => 'This is a message',
    ...
);

现在让我们说我希望能够在$lang['message']内设置我应该能够在language($tag, $parameters)上定义的参数。这些参数应在$lang['message']内设置var,例如:

$lang[$tag] = array(
    'message' => 'This is a '. $1,
    ...
);

组织language($tag, $parameters)的最佳方式是如何使$parameters$1 $lang['message']中的language($tag, 'post')内的内容成为什么?

如果您不明白,我希望能够致电'This is a post'并让它返回{{1}}。

3 个答案:

答案 0 :(得分:3)

如何将字符串保存为printf模板,例如

$lang[$tag] = array(
    'message' => 'This is a %s'
);

然后,您可以使用vsprintf传递一系列值替换,例如

function language($tag, array $values)
{
    // get $lang from somewhere

    return vsprintf($lang[$tag]['message'], $values);
}

答案 1 :(得分:2)

一种解决方案可能是使用sprintf()

'message' => 'This is a %s',

你就这样使用它:

sprintf($lang['message'], 'post');

请阅读manual page of sprintf()以了解其众多功能。

答案 2 :(得分:2)

我可能会使用sprintf()作为我的语言功能。

解决方案可能如下所示:

$lang = array(
    'stop' => 'Stop right there!',
    'message' => 'This is a %s',
    'double_message' => 'This is a %s with %s comments',
    ...
);

function language()
{
    $lang = get_lang_from_file(); // You probably have the idea
    $params = func_get_args();


    if(count($params) == 1)
        return $lang[$params[0]];

    $params[0] = $lang[$params[0]];
    return call_user_func_array("sprintf", $params);
}

这样你可以像这样使用它:

echo language('stop'); // outputs 'Stop right there!'
echo language('message', 'message for you'); // outputs 'This is a message for you'
echo language('double_message', 'message for you', '6'); // outputs 'This is a message for you with 6 comments