php - 带有命名参数的 vsprintf 或 sprintf,或者 PHP 中的简单模板解析

标签 php templates printf string.format named-parameters

我正在寻找一种为 sprintfprintf 使用命名参数的方法。

示例:

sprintf(
  'Last time logged in was %hours hours, 
   %minutes minutes, %seconds seconds ago'
  ,$hours,$minutes, $seconds
);

或通过 vsprintf 和关联数组。

我在这里找到了一些编码示例

function sprintfn ($format, array $args = array())

http://php.net/manual/de/function.sprintf.php

这里

function vnsprintf( $format, array $data)

http://php.net/manual/de/function.vsprintf.php

人们编写自己的解决方案。

但我的问题是,是否有一个标准的 PHP 解决方案可以实现此目的,或者是否有其他方法(也许使用 PEAR 提供的简单 PHP 模板),我可以通过坚持使用标准 PHP 来实现此目的?

感谢您的帮助。

最佳答案

迟到了,但你可以简单地使用 strtr “翻译字符或替换子字符串”

<?php

$hours = 2;
$minutes = 24;
$seconds = 35;

// Option 1: Replacing %variable
echo strtr(
    'Last time logged in was %hours hours, %minutes minutes, %seconds seconds ago',
    [
        '%hours' => $hours,
        '%minutes' => $minutes,
        '%seconds' => $seconds
    ]
);

// Option 2: Alternative replacing {variable}
echo strtr(
    'Last time logged in was  {hours} hours, {minutes} minutes, {seconds} seconds ago',
    [
        '{hours}' => $hours,
        '{minutes}' => $minutes,
        '{seconds}' => $seconds
    ]
);

// Option 3: Using an array with variables:
$data = [
    '{hours}' => 2,
    '{minutes}' => 24,
    '{seconds}' => 35,
];

echo strtr('Last time logged in was {hours} hours, {minutes} minutes, {seconds} seconds ago', $data);

// More options: Of course you can replace any string....

输出以下内容:

Last time logged in was 2 hours, 24 minutes, 35 seconds ago

关于php - 带有命名参数的 vsprintf 或 sprintf,或者 PHP 中的简单模板解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5701985/

相关文章:

javascript - 如何在没有注册的情况下记住用户

c++ - 编译器选择专门用于数组的预期模板,但随后尝试将数组参数转换为指针

c++ - this-> 是否必须从派生类访问 Base<T> 标识符?

linux - 将函数输出重定向到 printf 语句似乎在 bash 中不起作用

java - java中的%%是什么意思?

c - 打印 CString 会打印之前未知的文本

php - 计算 where 子句上每个值的 sql 结果

php - for 在不同表中查找 id 的过程,如果没有该 id 的条目则将其插入

php - mysqli_connect() : (HY000/2002): Can't connect to local MySQL server through socket

c++ - 模板类中的模板函数