echo语句中的逗号表示什么?

时间:2010-12-08 23:32:21

标签: php echo

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

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是一种树状结构,可以在this question(form2)中找到

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

编辑:如果不是回显字符串,我想将此函数生成的字符串存储在变量中。我特别感兴趣的是从第一个echo声明收到的输出。

编辑: 我正在喂这个阵列:

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

我得到的输出是:
(来自第一个回声声明)

<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>

(来自第二个回声声明)

<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>

2 个答案:

答案 0 :(得分:5)

编辑:好的,我明白了。罪魁祸首是你的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>";

答案 1 :(得分:2)

echo是一种语言结构,可以接受以逗号分隔的多个参数。效果与连接字符串相同。

输出不应该不同 - 我想不出它可能的实例。

编辑:啊,但确实如此。那是因为你的函数echo()是东西。在第一个实例中,<li>$node得到输出; 然后函数的输出来了。

我会WriteList递归return个值。