如何在关联数组中使用PHP here-doc?

bod*_*ydo 18 php arrays associative-array heredoc

我需要通过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 ... */
    ];
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何通过here-doc将元素"idx"与多行文本放在$ data数组中.

Dan*_*Lee 27

有几个问题,它必须看起来像这样:

$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 ... */
];
Run Code Online (Sandbox Code Playgroud)

这是一些hacky和笨重的PHP代码.我不建议使用它,它充满了问题(可能是由词法分析器引起的).更好地坚持好老字符串.


aro*_*oss 5

我遇到了同样的问题,最终我这样做了:

$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;
Run Code Online (Sandbox Code Playgroud)

我的想法是,我可以使用heredoc而不必使用非常难看的数组格式。

使用PHP 7.3时,情况有了很大改善。您现在可以执行以下操作:

$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 ... */
];
Run Code Online (Sandbox Code Playgroud)