Конкатенация строк вызывает тайм-аут - PullRequest
3 голосов
/ 18 июля 2011

Ниже у меня есть сегмент моего кода, который я недавно добавил в свой 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 ]

2 голосов
/ 18 июля 2011
for( $b = 0; $b < $num; $b++ )
    if( $b = 0 )

С $b = 0 вы сбрасываете цикл до нуля на каждой итерации. = для задания, == для проверки на равенство.

1 голос
/ 18 июля 2011

Ну, это зависит от размера массива, но здесь вы перераспределяете эту строку в каждой итерации, используя довольно неэффективную функцию. Это, вероятно, будет хорошо работать, пока ваш массив небольшой, но когда он содержит пару тысяч элементов, неудивительно, что выполнение занимает много времени.

Лучшим решением было бы использовать функцию взрыва, например:

$resultFields_values = '(' . implode(' , ', $naEUS) . ')';
1 голос
/ 18 июля 2011

Используйте оператор сравнения == вместо $ b = 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...