如何在关联数组中使用 PHP here-doc?
Posted
技术标签:
【中文标题】如何在关联数组中使用 PHP here-doc?【英文标题】:How to use a PHP here-doc in an associative array? 【发布时间】:2012-06-19 13:06:12 【问题描述】:我有一段较大的多行文本,我需要通过 here-doc 将其放入 php 关联数组中。它看起来像这样:
$data = [
"x" => "y",
"foo" => "bar",
/* ... other values ... */
"idx" = <<< EOC
data data data data
data data data data
data data data data
EOC;
"z" => 9,
/* ... more values ... */
];
我不知道如何通过 here-doc 将带有多行文本的元素“idx”放入 $data 数组中。
【问题讨论】:
【参考方案1】:有几个问题,应该是这样的:
$data = [
"x" => "y",
"foo" => "bar",
/* ... other values ... */
// you need to use '=>'
"idx" => <<<EOC
data data data data
data data data data
data data data data
EOC
,"z" => 9, // you can't end it with a semicolon, WHY EVER! and the comma needs to be on a new line
/* ... more values ... */
];
这是一些 hacky 和笨拙的 PHP 代码。我不推荐使用它,它充满了问题(可能是由词法分析器引起的)。最好坚持使用好的旧字符串。
【讨论】:
使用[ "x" => "y"]
代替array("x" => "y")
似乎是最好的解决方案。【参考方案2】:
使用 PHP 7.3 的东西有 improved significantly。您现在可以这样做了:
$data = [
"x" => "y",
"foo" => "bar",
/* ... other values ... */
"idx" => <<<EOC
data data data data
data data data data
data data data data
EOC,
"z" => 9,
/* ... more values ... */
];
我遇到了同样的问题,我最终这样做了(旧解决方案):
$data = [
"x" => "y",
"foo" => "bar",
/* ... other values ... */
"z" => 9,
/* ... more values ... */
];
$data["idx"] = <<<EOC
data data data data
data data data data
data data data data
EOC;
我的想法是我可以使用heredoc,而不需要非常丑陋的数组格式。
【讨论】:
以上是关于如何在关联数组中使用 PHP here-doc?的主要内容,如果未能解决你的问题,请参考以下文章