【问题标题】:Formatting an array value inside a Heredoc在 Heredoc 中格式化数组值
【发布时间】:2012-01-06 23:57:24
【问题描述】:

我想知道为什么我不能在 Heredoc 中执行 {number_format($row['my_number'])} 之类的操作。有没有办法解决这个问题,而不必求助于定义像下面的$myNumber 这样的变量?

查看http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc,但一无所获。

代码

foreach ($dbh -> query($sql) as $row):
    $myNumber = number_format($row['my_number']);

    $table .= <<<EOT
          <tr>
          <td>{$row['my_number']}</td> // WORKS
          <td>$myNumber</td> // WORKS
          <td>{number_format($row['my_number'])}</td> // DOES NOT WORK!
          </tr>
EOT;
endforeach;

【问题讨论】:

  • @KingCrunch 显然是的,OP 确实尝试过。请参阅上面的代码示例。
  • 不知道为什么这被否决了。这是一个合理的问题,OP 发布了一个示例,并咨询并链接到相关语言文档。
  • @MichaelBerkowski 你一定是新来的 :)
  • @e2-e4 嗯,2011 年 11 月我是。
  • @MichaelBerkowski 非常幽默!

标签: php arrays heredoc


【解决方案1】:

您可以使用{$ 变量表达式在HEREDOC 字符串中执行函数。但是,您需要事先为函数名称定义一个变量:

$number_format = "number_format";

$table .= <<<EOT
      <tr>
      <td>{$row['my_number']}</td> // WORKS
      <td>$myNumber</td> // WORKS
      <td>{$number_format($row['my_number'])}</td> // DOES NOT WORK!
      </tr>

所以这种方式违背了 HEREDOC 简洁的目的。


为了便于阅读,为此目的定义一个通用/空函数名称(如$expr = "htmlentities";)可能会更有帮助。然后,您可以在 heredoc 或双引号中使用几乎任何复杂的表达式和所有全局函数:

    "   <td>  {$expr(number_format($num + 7) . ':')}  </td>  "

而且我认为{$expr( 对于遇到这种结构的人来说更明显。 (否则这只是一个奇怪的解决方法。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2012-06-23
    • 2021-09-02
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多