【问题标题】:Is this code ineffective/slow? [duplicate]此代码无效/缓慢吗? [复制]
【发布时间】:2012-05-16 14:04:21
【问题描述】:

可能重复:
How is an array in a PHP foreach loop read?

如果我有这个功能:

function getList()
{
   $list = array();
   $list['foo'] = 'Foo';
   $list['bar'] = 'Bar';
   return $list;
}

然后我这样做:

foreach ( getList() as $item )
{
     echo $item.'<br>';
}

该代码会比这样做慢吗:

$list = getList();
foreach ( $list as $item )
{
     echo $item.'<br>';
}

【问题讨论】:

  • 通常当我写这样的问题时,我会在点击“提交”之前意识到我会花更少的时间为自己分析它:)
  • 这两个解决方案的运行时间应该大致相同。我没有像我一样测试它们我将有一个我正在使用的 php 版本的基准。不过,在类似的情况下,我会使用第二种解决方案,因为不会给类似的疑问留下空间

标签: php performance foreach micro-optimization


【解决方案1】:

我确信在您的第一个示例中,foreach 中的 getList() 函数仅被评估一次。 因此,不会有任何巨大的差异。

更新: 根据要求,这是我在 php 交互模式下进行的快速测试。

function getList() {
    echo 'a';
    return array(1,2,3);
}

foreach(getList() AS $item) {
    echo $item;
}

结果:a123

【讨论】:

  • 如果你的回答有一些理由就好了。 “我确定”并没有真正削减它。
  • @nickb:在getList() 中添加回声确实可以解决问题。虽然我同意,但他可能应该在原始答案中提到这一点。
  • 感谢您的建议。我已经提交了我刚刚做的测试代码来支持我的答案。
【解决方案2】:

试试这个

<?php
function getList()
{
    echo '<div>getList()</div>';
    $list = array();
    $list['foo'] = 'Foo';
    $list['bar'] = 'Bar';
    return $list;
}

foreach ( getList() as $item )
{
    echo $item.'<br>';
}
?>

你只会得到 1 个回显,这意味着 getList() 只调用一次 :)

【讨论】:

  • 我不明白这是如何回答这个问题的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多