Как обрезать каждую строку в heredoc (длинная строка) в PHP

Я ищу, чтобы создать функцию PHP, которая может обрезать каждую строку в длинной строке.

Например,

<?php
$txt = <<< HD
    This is text.
          This is text.
  This is text.
HD;

echo trimHereDoc($txt);

Выход:

This is text.
This is text.
This is text.

Да, я знаю о функции trim(), но я просто не уверен, как использовать ее для длинных строк, таких как heredoc.

Ответ 1

function trimHereDoc($t)
{
    return implode("\n", array_map('trim', explode("\n", $t)));
}

Ответ 2

function trimHereDoc($txt)
{
    return preg_replace('/^\s+|\s+$/m', '', $txt);
}

^\s+ соответствует пробелу в начале строки, а \s+$ соответствует пробелу в конце строки. Флаг m говорит, что он выполняет многострочную замену, поэтому ^ и $ будут совпадать с любой строкой многострочной строки.

Ответ 3

Простое решение

<?php
$txtArray = explode("\n", $txt);
$txtArray = array_map('trim', $txtArray);
$txt = implode("\n", $txtArray);

Ответ 4

function trimHereDoc($txt)
{
    return preg_replace('/^\h+|\h+$/m', '', $txt);
}

Пока \s+ удаляет пустые строки, сохраняет \h+ каждую пустую строку