Что лучший способ состоит в том, чтобы добавить две строки вместе?

Вы можете использовать regexp парсер и форматировать события в JSON. Вот мой пример, где я читаю ввод из хвоста файла журнала (с тем же вводом, что и у вас) и вывод в stdout. Дайте мне знать.


  @type tail
  path /tailsource/t.log
  pos_file /tailpos/t.log.pos
  read_from_head true
  tag temp
  
    @type regexp
    expression /^(?.*?)\s\| (?.*?)\s\| (?.*?)\s\| (?.*)$/
  



  @type stdout

Вот пример вывода -

{"timestamp": "2019-03-18 15: 56: 57.5522", "system": "HandFarm", "module": "ResolveDispatcher", "message": "начать разрешение msg: 8"}

blockquote>

21
задан jball 11 June 2010 в 20:10
поделиться

8 ответов

Вы всегда собираетесь создать новую строку whe конкатенация двух или больше строк вместе. Это не обязательно 'плохо', но это может иметь последствия производительности в определенных сценариях (как тысячи/миллионы конкатенаций в жестком цикле). Я не парень PHP, таким образом, я не могу дать Вам, любой совет относительно семантики различных способов связать строки, но для единственной конкатенации строк (или только некоторые), просто делает это читаемым. Вы не собираетесь видеть хит производительности из небольшого числа их.

13
ответ дан 29 November 2019 в 06:20
поделиться

Если его действительно большая сумма текста это действительно не имеет значения.

5
ответ дан 29 November 2019 в 06:20
поделиться

Конкатенация строк с точкой является определенно самым быстрым из этих трех методов. Вы будете всегда создавать новую строку, нравится ли Вам это или нет. Скорее всего, самый быстрый путь был бы:

$str1 = "Hello";
$str1 .= " World";

Не помещайте их в двойные кавычки как $result = "$str1$str2"; поскольку это генерирует дополнительные издержки для парсинга символов в строке.

Если Вы собираетесь использовать это только для вывода с эхом, затем использовать функцию эха, что можно передать его несколько параметров, поскольку это не генерирует новую строку:

$str1 = "Hello";
$str2 = " World";
echo $str1, $str2;

Для получения дополнительной информации о том, как обработки PHP интерполировали строки, и конкатенация строк проверяют блог Sarah Goleman.

37
ответ дан 29 November 2019 в 06:20
поделиться

Поскольку другие сказали, $str1 . $str2 совершенно в порядке в большинстве случаев, кроме (больших) циклов.
Обратите внимание пропуск некоторых решений:

$output = "$str1$str2";

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

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

3
ответ дан 29 November 2019 в 06:20
поделиться

Это не решение для 2 строк, но когда Вы размышление о присоединении к большему количеству строк лучший способ как этот:

$tmp=srray();
for(;;) $tmp[]='some string';
$str=implode('',$tmp);

Это быстрее, чтобы создать элемент массива и присоединиться к ним внезапно, чем присоединяются к ним сотня времен.

0
ответ дан 29 November 2019 в 06:20
поделиться

Совет, который Вы считали, возможно, был связан с echo функция, для которой это более быстро для использования запятых, например:

echo $str1, $str2;

Другой подход должен создать строку в переменной (например, использование. оператор), затем повторяют целую строку в конце.

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

0
ответ дан 29 November 2019 в 06:20
поделиться

Это не имеет значения, если не используется в looong цикле. В обычном внимании случаев на удобочитаемость кода, даже если Вы потеряли несколько циклов процессора.

Пример 1 и 2 подобен, я не думаю, что должно быть много различия, это было бы fastes всех. № 1 мог бы быть немного быстрее.

Пример 3 будет медленнее, поскольку sprintf формат (' %s %s') должен быть проанализирован.

Пример 4 делает замену, которая включает поиск в строке - дополнительная вещь сделать, занимает больше времени.

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

Если Вы идентифицируете его как проблему, попытайтесь гуглить для строкового класса разработчика php (существуют некоторые, чтобы быть найденными), или запишите свое собственное.

3
ответ дан 29 November 2019 в 06:20
поделиться

Я не гуру PHP, однако, во многих других языках (например, Python), самый быстрый способ собрать длинную строку из множества маленьких строк - это добавить строки, которые вы хотите сконцентрировать в списке, а затем присоединить их, используя встроенный метод соединения. Например:

$result = array();
array_push("Hello,");
array_push("my");
array_push("name");
array_push("is");
array_push("John");
array_push("Doe.");
$my_string = join(" ", $result);

Если вы собираете огромную строку в узком цикле, то самый быстрый способ сделать это - добавить строку в массив, а затем присоединить массив в конце.

Примечание: Вся эта дискуссия зависит от производительности массива_push. Вам необходимо добавить свои строки в список , чтобы это было эффективно на очень больших строках. Из-за моего ограниченного доступа к php, я не уверен, доступна ли такая структура, или массив php быстро добавляет новые элементы.

.
0
ответ дан 29 November 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: