12

PHP中有没有办法像Python一样命名我的说明符?

我想要这个在 PHP 中:

$foo = array('name' => 24);
printf("%(name)d", $foo);

我在谷歌或 php 手册中找不到任何相关内容。

4

4 回答 4

11

好问题!

通过使用正则表达式,您可以轻松推出自己的产品。我的实现基于调用的思想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-happy。结果证明一个超级基础foreach就足够了,这也使得该函数在 PHP >= 4.1 中可用(不是 100% 确定特定版本,但应该在那里)。

看到它在行动

于 2011-09-15T18:02:43.730 回答
9

使用strtr

$foo = array('%name%' => 24);
strtr("%name%", $foo); // 24

你也可以这样做

"${foo['name']}"

或这个:

$name = 24;
"$name"
于 2011-09-15T17:53:21.430 回答
9

您可以sprintf通过为参数编号来做到这一点,如下所示:

echo sprintf('hello, %2$s. What is your %1$s', 'age', 'Jesse');


输出以下字符串:

你好,杰西。你几岁

于 2011-09-15T17:54:16.460 回答
0

更接近的核心功能是vsprintf()使用数组而不是多个参数,但您仍然必须使用编号参数。

在这个函数文档的评论中,有人创建了一个函数来做你想做的事情 vnsprintf() printf+array+named parameters

于 2011-09-15T17:59:26.497 回答