【问题标题】:Make function inside echo be outputted at formatted position使 echo 内的函数在格式化位置输出
【发布时间】:2016-11-21 13:42:49
【问题描述】:

我已经尝试了很多方法来解决这个问题,包括所有类型的引用等。在解释情况之前,我会给出我当前的代码。

function show_msgs($msgs)
{
    foreach($msgs as $msg) {
        echo '<div class="msg">' . $msg . '</div>' . "\n    ";
    }
}

function generate_msgBox()
{
    global $array;        

    $stackoverflow = 
<<<EOT
    <div class="container">
        <div class="msgBox">
            %s      
        </div>
    </div>
EOT;

    $stackoverflow = sprintf($stackoverflow, show_msgs($array));

    echo $stackoverflow;
}

generate_msgBox 函数当前在调用时输出:

<div class="msg">First message!</div>
    <div class="msg">Seconds message!</div>

    <div class="container">
        <div class="alertBox">

        </div>
    </div>

但是我需要它来输出这个:

<div class="container">
    <div class="alertBox">
        <div class="msg">First message!</div>
        <div class="msg">Seconds message!</div>       
    </div>
</div>

我尝试将函数直接放在用普通引号括起来的 echo 中,我得到了相同的结果。

我该如何解决这个问题?

【问题讨论】:

标签: php function heredoc


【解决方案1】:

这个呢:

function show_msgs($msgs)
{
    foreach($msgs as $msg) {
        echo '<div class="msg">' . $msg . '</div>' . "\n";
    }
}

function generate_msgBox()
{
    $stackoverflow = '<div class="container"><div class="msgBox">'.show_msgs().'</div></div>';

    echo $stackoverflow;
}

【讨论】:

  • 正如我在 OP 中所说,我已经尝试过了。它给出了相同的结果。
【解决方案2】:

show_msgs 函数中的回声在 generate_msgBox 函数输出之前起作用 - 当您调用它时。只返回带有函数结果的字符串

function show_msgs($msgs)
{
    $ret = '';
    foreach($msgs as $msg) {
        $ret .= '<div class="msg">' . $msg . '</div>' . "\n    ";
    }
    return $ret;
}

【讨论】:

  • 谢谢,它工作得很好。顺便说一句,你在 'ret' 前面漏掉了 '$'。
  • 比我快回答 splash58! :P
  • @Reisclef 我不喜欢函数中的回声——每次输出都没有任何控制
  • 我也是,你所做的正是我会做的。当我看到你回答了它时,我正试图测试我的理论(因为 OP 已经尝试了很多东西)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
相关资源
最近更新 更多