2017-04-20 71 views
1

末印刷额外的数字我有一个PHP(诉7.0.16)脚本在命令行上运行:的printf在CLI PHP在行

$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

的问题是在这条线:

echo printf(...) 

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

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

您应该删除echo或使用sprintf()而不是printf()

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

+0

不能相信我错过了。非常感谢! – raphael75

1

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

PHP docs

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

刚刚删除echo fom那行。

+0

非常好,谢谢! – raphael75