为什么这个printf输出重复27?

时间:2017-11-07 14:33:38

标签: php printf range

<?php

$letters = range(A,Z);

$format_string = '<li><a href="#%s">%s</a></li>';

foreach ($letters as $key => $letter) {
    echo printf($format_string,$letter, $letter);
}

?>

这是打印出来自A-W字母的li,但输出如下:

  • A

    27

  • 27

等......直到最后一个号码。

使用带字符串连接的常规回显输出列表,没有任何27个。

1 个答案:

答案 0 :(得分:1)

您正在使用echo调用的返回值来调用printf,该调用在the manual中定义为

  

返回输出字符串的长度。

所以您的printf来电正在运行,并显示您的字符串。这将返回 27 ,这是一个字母插入其中后字符串<li><a href="#%s">%s</a></li>的长度。然后,对echo的调用显示在字符串本身显示之后。

简而言之,要么删除echo,要么在评论中提到,请使用sprintf代替字符串,而不是显示字符串。