2011-07-18 60 views
3

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

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

+0

呃......这是尴尬。 if($ b = 0)... if($ b == 0) – Joshua

+0

如果您愿意,您可以编辑您的帖子。 – GolezTrol

+0

我宁愿让它保持原样,以便看到它的人可以看到发生了什么并跟随对话。我相信这不难推断,但你永远不知道。 我不*实际*尴尬,这是一个常见的错误。 – Joshua

回答

1

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

一个更好的解决办法是使用破灭功能,像这样:

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

你提到它后,我看了起来。我的方式有效,但这要容易得多。 – Joshua

+1

虽然所有的答案都很有帮助,但我选择了这个作为正确答案,因为最终我使用了implode。 – Joshua

1

使用比较==操作符,而不是$ B = 0

+0

哈哈是的,我发现这一点后我想通了。我讨厌这种情况发生。我从字面上看了一个多小时。 – Joshua

+0

通过张贴,你会得到一个更好的关系的问题比盯着它。 –

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

随着$b = 0,你在每次迭代重新循环回零。 =用于转让,==用于平等检测。

+0

谢谢!我知道不同之处,但它并不阻止我偶尔做这件事,你知道:/ – Joshua