字符串连接导致超时

时间:2011-07-18 19:17:25

标签: php string timeout performance concatenation

下面我有一段我最近添加到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秒超时。

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

3 个答案:

答案 0 :(得分:2)

for( $b = 0; $b < $num; $b++ )
    if( $b = 0 )

使用$b = 0,您将在每次迭代时将循环重置为零。 =用于分配,==用于等同性测试。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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