php - 在 PHP foreach 的脚本中回显 JSON.parse 时,如何避免语法错误?

标签 php json foreach syntax-error echo

这是我在 StackOverflow 上的第一个问题,我认为自己是新手(自学成才)。请多多包涵。

以下脚本在未包含在 php 标记中时可在页面上运行。

<script>
  var json = '{"submitted_values":{"15":{"15.1":"123"}}}';
var obj = JSON.parse(json);

function printValues(obj) {
  for (var k in obj) {
    if (obj[k] instanceof Object) {
      printValues(obj[k]);
    } else {
      document.write(obj[k]);
    };
  }
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script>

当包裹在 php 标签中并被回显时,相同的脚本在页面上不起作用。

它实际上使网站崩溃。

第二行var json = '{"submitted_values":{"15":{"15.1":"123"}}}';在下一个代码块中导致 syntax error, unexpected ':' .
<?php echo '<script>
  var json = '{"submitted_values":{"15":{"15.1":"123"}}}';
var obj = JSON.parse(json);

function printValues(obj) {
  for (var k in obj) {
    if (obj[k] instanceof Object) {
      printValues(obj[k]);
    } else {
      document.write(obj[k]);
    };
  }
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script>'; ?>

以下描述了我想要工作的内容。

测试是一个表格行,三列。

下一个代码块中的第 1 列是上面的脚本,当然,它不起作用。

Col 2 工作并产生一个字符串,其中 document.write(obj["submitted_values"]["15"]["15.1"]);在脚本作品中。我已经测试了一个实际的(精心制作的、嵌套的)字符串,它确实有效,但只有在 php 标签之外时才有效。

Col 3 是上面的脚本,但带有 '{"submitted_values":{"15":{"15.1":"123"}}}'替换为 ' . esc_html($incomplete_submission->submission) . ' .

Col 3 是我最终想要在 WordPress 插件中工作的内容。

如果可以的话,有人可以从echo '<!-- Col 3 --><td><script>复制吗?在下面的代码块中,更改代码以使其正常工作,然后将其全部粘贴到答案中?

我要求粘贴整个内容,因为它可以为您节省额外的来回时间。

谢谢!
<?php
foreach ($incomplete_submissions as $incomplete_submission)
{
 echo '<!-- Row --><tr>';
 echo '<!-- Col 1 --><td><script>
    var json = '{"submitted_values":{"15":{"15.1":"123"}}}';
var obj = JSON.parse(json);

function printValues(obj) {
    for (var k in obj) {
        if (obj[k] instanceof Object) {
            printValues(obj[k]);
        } else {
            document.write(obj[k]);
        };
    }
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script></td>';
    echo '<!-- Col 2 --><td>' . esc_html($incomplete_submission->submission) . '</td>';
    echo '<!-- Col 3 --><td><script>
    var json = ' . esc_html($incomplete_submission->submission) . ';
var obj = JSON.parse(json);

function printValues(obj) {
    for (var k in obj) {
        if (obj[k] instanceof Object) {
            printValues(obj[k]);
        } else {
            document.write(obj[k]);
        };
    }
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script></td>';
    echo '</tr>';
   }
?>

最佳答案

PHP 有 Heredoc 和 Nowdoc 字符串,它们是在 PHP 中处理多行字符串的最佳方式。

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

您可以通过使用这种类型的字符串来解决您的问题,如下所示:

<?php echo <<<EOD
    <script>
        var json = '{"submitted_values":{"15":{"15.1":"123"}}}';
        var obj = JSON.parse(json);

        function printValues(obj) {
          for (var k in obj) {
            if (obj[k] instanceof Object) {
              printValues(obj[k]);
            } else {
              document.write(obj[k]);
            };
          }
        };
        printValues(obj);
    </script>
EOD; 
?>

请注意,结束标记 EOD 根本不能缩进,否则 PHP 不会承认它。此外,您不必使用“EOD”;它可以是你想要的任何字符串。

关于php - 在 PHP foreach 的脚本中回显 JSON.parse 时,如何避免语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60368582/

相关文章:

javascript - 将从本地存储检索到的 JSON 数组分配给 JavaScript 数组

powershell - Foreach 循环中的多个变量 [PowerShell]

php - 按数字对奇怪的数组进行排序

json - 如何在以下输出中获取过去 7 天的信息

php - AJAX 调用不工作,即使 PHP 和 JS 文件自己工作

javascript - 访问消息正文中的 Json 字段

c# - 如何在 visual studio 的即时窗口中运行 foreach 循环?

php - 多维数组中的求和值

php - 如何使用php获取唯一的单词对(字符串)并插入到mysql表中

php - php中的3级数组用于组织数据