РЕДАКТИРОВАТЬ: ОК, я понял.Виновником является ваша writeList()
функция.Внутри этой функции есть дополнительный echo
.
Когда вы делаете это:
echo "<li>", $node, writeList($arr), "</li>";
Каждая часть сначала оценивается, а затем распечатывается.Это эквивалентно:
echo "<li>";
echo $node;
echo writeList($arr);
echo "</li>";
Но когда вы сделаете это:
echo "<li>" . $node . writeList($arr) . "</li>";
Вся строка создается сначала с помощью операторов конкатенации .
, а затем распечатывается.Это означает, что writeList($arr)
вызывается первым при построении строки, then
вызывается внешний echo
.
Чтобы избежать этой проблемы, не повторяйте ничего внутри вызовов функций.Создайте строки, используя оператор конкатенации, а затем верните их, чтобы ваш внешний echo
мог их напечатать.
что, если вместо повторения строк я хочу сохранить строку, сгенерированную из этогофункция в переменной.В частности, меня интересует вывод, полученный из первого оператора echo.
Использовать буферизацию вывода.
ob_start();
echo "<li>", $node, writeList($arr), "</li>";
$out = ob_get_clean();
Но для этого конкретного утверждения, почему бы просто не объединить вместо этого?
$out = "<li>" . $node . writeList($arr) . "</li>";