【问题标题】:php sprintf with array带有数组的php sprintf
【发布时间】:2012-10-30 19:31:08
【问题描述】:

我有一个数组女巫匹配字符串占位符如下:

"some text %s another text %s extra text %s"

和数组:

$array[0] match the first %s 
$array[1] match the second %s 
$array[2] match the third %s 

我认为可以使用 sprintf 函数来完成,如下所示:

$content = sprintf("some text %s another text %s extra text %s", $array);

但这会返回参数太少的错误,我尝试使用 implode:

$content = sprintf("some text %s another text %s extra text %s", implode(",",$array));

提前致谢

【问题讨论】:

标签: php arrays printf


【解决方案1】:

使用vsprintf 代替sprintf。它接受一个数组参数,从中格式化字符串。

$content = vsprintf("some text %s another text %s extra text %s", $array);

【讨论】:

  • 是的,谢谢,还有 7 分钟接受答案:)
  • PHP 5.6.33中,$contentformatted string的长度;我们可以从vsprintf以上链接的第一条评论中尝试$string = 'Hello %name!'; $data = array( '%name' => 'John' ); $greeting = str_replace(array_keys($data), array_values($data), $string);
【解决方案2】:

PHP 5.6+ 中vsprintf 的替代方案

sprintf("some text %s another text %s extra text %s", ...$array);

【讨论】:

  • 这个答案效果很好。我不明白 php sprintf 文档说第二个参数是 mixed 类型,但如果它是一个数组则会抛出错误。 php.net/manual/en/function.sprintf.php 不知道这混合是什么。
【解决方案3】:

这里你必须使用vsprintf() 而不是sprintf()

sprintf() 只接受普通变量作为参数。但是您正在尝试将数组作为参数传递。

为此,您需要接受数组作为参数的vsprintf()

例如你的情况:

"some text %s another text %s extra text %s"

和数组:

$array[0] match the first %s 
$array[1] match the second %s 
$array[2] match the third %s 

要实现您想要的,您必须执行以下操作:

$output = vsprintf("some text %s another text %s extra text %s",$array);
echo $output;

输出:

some text match the first another text match the second extra text match the third

【讨论】:

    【解决方案4】:
    $rv = array(1,2,3,4);
    sprintf('[deepak] yay [%s]', print_r($rv, true))
    

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多