我的代码是否使用最佳方式读取 php 中的标准输入?

发布于 2024-12-03 22:52:00 字数 711 浏览 1 评论 0原文

我正在使用 PHP CLI 来提供标准输入。我是否使用了读取该输入的最佳方法?

比如我会给它提供50000行数据。每行包含两个数字。我下面的代码是读取 50,000 行数据的最有效方法吗?或者这是一种非常低效的方法?

这是我的代码:

<?php

// Testing time period for execution

// Time tracker: TESTING
$micropoint1 = microtime(true);

// First, retrieve the number of points that will be provided.
$no_points = fgets(STDIN);

for($i=1, $max=$no_points+1; $i<$max; $i++) {
    list($x, $y) = fscanf(STDIN, "%d %d"); // Get the string returned from the command line and convert to an array
}

// Time tracker: TESTING
$micropoint2 = microtime(true);
$pointelapsed = $micropoint2 - $micropoint1; 


fwrite(STDOUT, "\nPoint Loop Took ".$pointelapsed." microsecs\n");



?>

I am using PHP CLI to provide standard input. Am I using the optimal method of reading that input?

For example, I will provide it 50,000 lines of data. Each line contains two numbers. Is my code below the most efficient way to read 50,000 lines of data? Or this a very inefficient way to do so?

Here is my code:

<?php

// Testing time period for execution

// Time tracker: TESTING
$micropoint1 = microtime(true);

// First, retrieve the number of points that will be provided.
$no_points = fgets(STDIN);

for($i=1, $max=$no_points+1; $i<$max; $i++) {
    list($x, $y) = fscanf(STDIN, "%d %d"); // Get the string returned from the command line and convert to an array
}

// Time tracker: TESTING
$micropoint2 = microtime(true);
$pointelapsed = $micropoint2 - $micropoint1; 


fwrite(STDOUT, "\nPoint Loop Took ".$pointelapsed." microsecs\n");



?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谁人与我共长歌 2024-12-10 22:52:01

我无法想象你的方法会变得更加有效。

I can't imagine your approach getting any more efficient.

独闯女儿国 2024-12-10 22:52:01

为了提高效率,最好:

  1. 将“%d %d”变成单引号 '%d %d'
  2. 将此字符串移动到变量/常量中,并在 50000 循环中使用它

To be more efficient, it's better to:

  1. Make your "%d %d" into single quotes '%d %d'
  2. Move this string into variable/constant and use it in 50000 loop
傲娇萝莉攻 2024-12-10 22:52:01

因为它显然非常小,不能进一步削弱。但是,由于您没有指定,因此您只想优化循环。然后我对其余代码进行了几点说明。

显示微时间时,您可以执行以下操作:

$pointelapsed = number_format(microtime(true) - $micropoint1, 7);

此外,如果 fscanf() 无法返回任何内容,会发生什么情况。不会报错吗..

As it is clearly very minimal and cannot be nerfed any further. However, since you didn't specify, that you want to optimize the loop only. Then I few points for the rest of the code.

When displaying the microtime, you can do this:

$pointelapsed = number_format(microtime(true) - $micropoint1, 7);

And also, what happens if fscanf() cant return anything. Wouldn't it give out an error..?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文