【问题标题】:what does comma in echo statement signify?echo 语句中的逗号是什么意思?
【发布时间】:2010-12-08 23:32:20
【问题描述】:

我正在尝试从递归函数中回显一个字符串:
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

我得到的输出是:
(来自第一个 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>

【问题讨论】:

  • 它们有何不同?在回显之前,所有内容都将被视为字符串...
  • 我已经提供了我正在使用的函数,输入数组和输出两种情况。告诉我,这不是我的错误,而是一个概念问题。 :)

标签: php echo


【解决方案1】:

编辑:好的,我明白了。罪魁祸首是你的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 语句收到的输出特别感兴趣。

使用输出缓冲。

ob_start();
echo "<li>", $node, writeList($arr), "</li>";
$out = ob_get_clean();

但是对于那个特定的语句,为什么不直接连接呢?

$out = "<li>" . $node . writeList($arr) . "</li>";

【讨论】:

  • 我也想连接。但是,正如我所说,这里的两个输出是不同的。 :(
  • @Stoic:将输出粘贴到您的问题中。
  • 已经为此添加了函数、输入和输出。
  • 所以,问题是在第一次评估中首先发生并用函数调用逐个替换,而在第二个字符串中是通过调用递归函数构造的,而不是形成字符串实际上是在回显它在每个级别......对吗?
【解决方案2】:

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

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

编辑:啊,但确实如此。那是因为你的函数echo()es 的东西。在第一种情况下,&lt;li&gt;$node 得到输出; 然后函数的输出来了。

我会递归地获得 WriteList 简单的 return 值。

【讨论】:

  • 我正在考虑诸如该函数调用生成什么样的输出之类的事情,但没有骰子。该函数内部的echo 不会返回任何可能被外部回显意外回显的内容。
  • 等等,我想我成功了;看我的回答。
  • @BoltClock 是的,我刚刚添加了同样的东西 :)
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 2013-10-16
  • 2011-11-18
相关资源
最近更新 更多