【问题标题】:String concatenation causing timeout字符串连接导致超时
【发布时间】:2011-10-07 23:08:01
【问题描述】:

下面是我最近添加到 PHP 中的一段代码,它接受一个整数数组 ($naEUS) 并对其进行迭代,在数字之间附加逗号,开始和结束有一些例外.最终结果应该是一个如下所示的字符串:( ### , ### , ### , ### )

    $num = count( $naEUS[$f] );
    $resultsFields_values = "(";
    for( $b = 0; $b < $num; $b++ )
    {
        if( $b = 0 )
        {
            $resultsFields_values = substr_replace( $resultsFields_values, " {$naEUS[$b]} " , ( strlen($resultsFields_values) ), 0);
        }
        $resultsFields_values = substr_replace( $resultsFields_values, ", {$naEUS[$b]} " , ( strlen($resultsFields_values) ), 0);
    }
    $resultsFields_values = substr_replace( $resultsFields_values, ")" , ( strlen($resultsFields_values) ), 0);

我意识到有很多线程解决字符串连接问题,但它们只解决了我的问题的部分。我知道这是一种非常低效的方法。他们展示了一种更好的方法,但这很容易找到。

真正想知道的是为什么我的 5 秒运行时间 PHP 需要 30 秒超时。

当然,也欢迎更好的解决方案。

【问题讨论】:

  • 嗯...这很尴尬。如果($b = 0)...如果($b == 0)
  • 您可以根据需要编辑您的帖子。
  • 我更喜欢让它保持原样,以便看到它的人可以看到发生的事情并关注对话。我敢肯定这不难推断,但你永远不知道。我并不实际上感到尴尬,这是一个常见的错误。
  • 好主意。这确实是一个常见的错误。我使用了几种将= 作为比较运算符的语言,所以我做错的次数比我想的要多。 :)

标签: php string timeout performance concatenation


【解决方案1】:
for( $b = 0; $b < $num; $b++ )
    if( $b = 0 )

使用$b = 0,您将在每次迭代时将循环重置为零。 = 用于赋值,== 用于相等测试。

【讨论】:

  • 谢谢!我知道区别,但这并不能阻止我时不时地这样做,你知道的:/
【解决方案2】:

嗯,这取决于数组的大小,但是您在这里所做的是在每次迭代中使用效率相当低的函数重新分配该字符串。只要您的数组很小,这可能就可以正常工作,但是当它包含数千个项目时,执行需要很长时间也就不足为奇了。

更好的解决方案是使用 implode 函数,如下所示:

$resultFields_values = '(' . implode(' , ', $naEUS) . ')';

【讨论】:

  • 你提到后我查了。我的方法行得通,但这要容易得多。
  • 虽然所有答案都有帮助,但我选择了这个作为正确答案,因为我最终使用了 implode。
【解决方案3】:

使用比较运算符 == 而不是 $b = 0。

【讨论】:

  • 哈哈,是的,我在发布此消息后就明白了。我讨厌这种情况发生。我从字面上看这个超过一个小时。
  • 发帖比盯着问题看,你能更清楚地了解问题。
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 2011-04-22
  • 2016-12-07
相关资源
最近更新 更多