2016-06-03 2 views
0

Вариант 1 или вариант 2, который является наиболее осуществимым способом использования памяти и производительности для добавления нескольких идентификаторов электронной почты в следующем цикле.PHP-массив или производительность строк и использование памяти

Вариант 1: String $errorString

while (!feof($file_handle)) { 
    $errorString .= $email."<br>"; 
} 

Вариант 2: Array $errorArray[]

while (!feof($file_handle)) { 
    $errorArray[].= $email."<br>"; 
} 
+0

С '$ errorArray' вам нужно будет перебирать его, чтобы получить каждое поле. Вероятно, вы также не хотите '. =' Там. – chris85

+0

Несвязанный: вы не должны использовать 'while (! Feof ($ file_handle))'. Вы должны использовать 'while ($ line = fgets ($ file_handle))' – Barmar

+1

микро оптимизации. Вариант массива более универсален. ex: вы можете подсчитать количество ошибок –

ответ

2

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

Строка займет больше времени, потому что каждый раз, когда вы объединяетесь, она должна копировать обе строки в новое значение $errorString.

Если у вас нет тысяч электронных писем, вряд ли будет какая-либо заметная разница, поэтому вы должны использовать тот метод, который упрощает остальную часть кода. Premature optimization is the root of all evil.

0

Ну тогда. В большинстве случаев строка будет подвергаться минимальной обработке в фоновом режиме, чтобы добавить к ней подстроку. Тем не менее, есть несколько заметных вещей:

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

Однако, если вам нужно представить их как отдельные поля, вам потребуется сначала указать explode строку на разные части, прежде чем вы сможете их использовать. Опять же, вы использовали бы больше использования памяти, если бы использовали строку.

Дело в том, что это зависит от того, что вы собираетесь делать с переменной.

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

PS: При назначении переменной varibale для массива вы не используете array [] .= something, как и в вопросе. Вы делаете array[] = something, так как вы добавляете something в array, а не в array[index].

Смежные вопросы