Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP循环上下文查询_Php_Loops - Fatal编程技术网

PHP循环上下文查询

PHP循环上下文查询,php,loops,Php,Loops,一直困扰我的一个问题是,为什么人们会像第一个版本那样写,而第二个版本更小,更容易阅读。我认为这可能是因为php每次迭代时都会计算strlen。有什么想法吗 第一版 for ($i = 0, $len = strlen($key); $i < $len; $i++) {} 如果循环需要多次迭代,并且$key在此过程中不会更改,则最好使用第一个版本 如果循环正在更新$key并且您需要重新计算它,或者在重新计算时它不会影响您的性能,则最好使用第二个版本。如果循环需要多次迭代并且$key

一直困扰我的一个问题是,为什么人们会像第一个版本那样写,而第二个版本更小,更容易阅读。我认为这可能是因为php每次迭代时都会计算strlen。有什么想法吗

第一版

    for ($i = 0, $len = strlen($key); $i < $len; $i++) {}

如果循环需要多次迭代,并且
$key
在此过程中不会更改,则最好使用第一个版本


如果循环正在更新
$key
并且您需要重新计算它,或者在重新计算时它不会影响您的性能,则最好使用第二个版本。

如果循环需要多次迭代并且
$key
在过程中不会更改,则最好使用第一个版本


如果循环正在更新
$key
并且您需要重新计算它,或者在重新计算时它不会影响您的性能,则最好使用第二个版本。

如果循环需要多次迭代并且
$key
在过程中不会更改,则最好使用第一个版本


如果循环正在更新
$key
并且您需要重新计算它,或者在重新计算时它不会影响您的性能,则最好使用第二个版本。

如果循环需要多次迭代并且
$key
在过程中不会更改,则最好使用第一个版本


如果循环正在更新
$key
并且您需要重新计算它,或者重新计算时不影响您的性能,则最好使用第二种方法。

这是性能问题

您的
for
循环的第一个版本每次都会重新计算
strlen
,因此性能可能会降低

尽管这还不够重要,但你可能会惊讶地发现,慢的速度有时是指数级的


您可以查看一些带有循环的性能基准。

这是性能问题

您的
for
循环的第一个版本每次都会重新计算
strlen
,因此性能可能会降低

尽管这还不够重要,但你可能会惊讶地发现,慢的速度有时是指数级的


您可以查看一些带有循环的性能基准。

这是性能问题

您的
for
循环的第一个版本每次都会重新计算
strlen
,因此性能可能会降低

尽管这还不够重要,但你可能会惊讶地发现,慢的速度有时是指数级的


您可以查看一些带有循环的性能基准。

这是性能问题

您的
for
循环的第一个版本每次都会重新计算
strlen
,因此性能可能会降低

尽管这还不够重要,但你可能会惊讶地发现,慢的速度有时是指数级的



您可以查看一些带有循环的性能基准。

因为您的第二个版本将在每个循环中重新计算strlen,并降低性能。我想可能是这样的。。把它写在一个答案中,并获得一些分数:)你明白原因。为了看看它是否有很大的不同,你可以测试它。时间一个大循环,你就会得到你的答案。我认为差别很小,特别是如果在循环内完成了合理的数量。你可以使用它循环1.000.000次,然后以毫秒为单位检查差异(在循环前后的时间)。这将回答您的问题。我更喜欢
while($I--)
,但我发现这很有趣:因为您的第二个版本将在每个循环中重新计算
strlen
,并降低性能。我想可能是这样的。。把它写在一个答案中,并获得一些分数:)你明白原因。为了看看它是否有很大的不同,你可以测试它。时间一个大循环,你就会得到你的答案。我认为差别很小,特别是如果在循环内完成了合理的数量。你可以使用它循环1.000.000次,然后以毫秒为单位检查差异(在循环前后的时间)。这将回答您的问题。我更喜欢
while($I--)
,但我发现这很有趣:因为您的第二个版本将在每个循环中重新计算
strlen
,并降低性能。我想可能是这样的。。把它写在一个答案中,并获得一些分数:)你明白原因。为了看看它是否有很大的不同,你可以测试它。时间一个大循环,你就会得到你的答案。我认为差别很小,特别是如果在循环内完成了合理的数量。你可以使用它循环1.000.000次,然后以毫秒为单位检查差异(在循环前后的时间)。这将回答您的问题。我更喜欢
while($I--)
,但我发现这很有趣:因为您的第二个版本将在每个循环中重新计算
strlen
,并降低性能。我想可能是这样的。。把它写在一个答案中,并获得一些分数:)你明白原因。为了看看它是否有很大的不同,你可以测试它。时间一个大循环,你就会得到你的答案。我认为差别很小,特别是如果在循环内完成了合理的数量。你可以使用它循环1.000.000次,然后以毫秒为单位检查差异(在循环前后的时间)。这将回答你的问题。我更喜欢
而($I--)
,但我发现这很有趣:很难将其标记为正确。我喜欢你的评论说“如果循环正在更新$key并且你需要重新计算它”,这取决于。如果键的长度在某一点缩短,而不重新计算最大值,您可能会发现自己得到一个索引超出范围异常。我认为这是一种情况,因此必须加以考虑!很难把它标记为正确的。我喜欢你的节目
    for ($i = 0; $i < strlen($key); $i++) {}