CLI中的printf php在行尾打印额外的数字

时间:2017-04-20 17:43:24

标签: php command-line printf

我在命令行上运行了一个php(v.7.1.16)脚本:

$ct = 1;
foreach($sort_this as $cur_site_id => $dx){

    $cur_location = $locations[$cur_site_id]['location'];
    $msg = "\033[A\33[2K\r" . 'getting data for %25s (' . $cur_site_id . ') store: %7s %01.2f' . "\n";
    echo printf($msg, $cur_location, ($ct . ' / ' . count($sort_this)), number_format((($ct / count($sort_this)) * 100), 2));
    $ct++;
}

此循环运行大约40次迭代。 printf语句适用于1个小问题。在获取数据"之后的行上我看到一个数字从7x-7y开始增加(有时它从71开始,有时在77开始等)。我无法弄清楚导致这个数字打印的原因。因此,当循环开始时,我在屏幕上看到类似的内容:

getting data for                  DENVER (531) store: 42 / 42 0.00
77

当它完成这样的事情时:

getting data for                 SEATTLE (784) store: 42 / 42 100.00
79

我找到了如何打印到同一行并清除数据:

Erase the current printed console line

有没有办法阻止7x代码显示?还有,他们是什么?

2 个答案:

答案 0 :(得分:2)

问题在于这一行:

echo printf(...)

printf()使用其参数(格式和值)生成一个字符串并打印它。它返回打印字符数(它生成的字符串的长度)。

然后,您的代码会将此值传递给打印出来的echo。这是额外数字的来源,范围为70-77。

您应该删除echo或使用sprintf()代替printf()

sprintf()生成与printf()相同的字符串,但不会打印它;它返回它并作为参数传递给显示它的echo

答案 1 :(得分:1)

printf()返回输出字符串的长度。

请参阅PHP docs

  

返回值:返回输出字符串的长度。

只需删除该行的echo