echo 语句中的逗号代表什么意思?

2023-12-08

我试图从递归函数中回显字符串:
echo "<li>", $node, recurse($arr), "</li>";
and
echo "<li>" . $node . recurse($arr) . "</li>";

function writeList($tree)
{
    if($tree == null) return;
    echo "<ul>";
    foreach($tree as $node=>$children) {
        echo "<li>", $node, writeList($children) , "</li>";
    }
    echo "</ul>";
}

$tree是一个树状结构,可以在这个问题 (form2)

而且,我可以注意到两者的输出是不同的。
有人可以告诉我使用上的区别吗, and .一般来说,特别是在这个例子中?

EDIT:如果我不想回显字符串,而是想将此函数生成的字符串存储在变量中,该怎么办?我特别对第一个收到的输出感兴趣echo陈述。

编辑: 我正在喂这个数组:

array
  3 => 
    array
      4 => 
        array
          7 => null
          8 => 
            array
              9 => null
      5 => null
  6 => null

我得到的输出是:
(来自第一个 echo 语句)

<ul><li>3<ul><li>4<ul><li>7</li><li>8<ul><li>9</li></ul></li></ul></li><li>5</li></ul></li><li>6</li></ul>

(来自第二个 echo 语句)

<ul><ul><ul><li>7</li><ul><li>9</li></ul><li>8</li></ul><li>4</li><li>5</li></ul><li>3</li><li>6</li></ul>

EDIT:好的我明白了。罪魁祸首就是你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>";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

echo 语句中的逗号代表什么意思? 的相关文章

随机推荐