使用替代语法和关联数组时的代码更简洁


Cleaner code when using alternative syntax and associative arrays.

我使用替代语法为我的视图编写一个foreach循环,以获得这样的一段html

<h3><a href="post.php/?id=1">My Post</a></h3>

我使用了下面的行,但它似乎在所有串联中都非常笨拙。

<?php   
    foreach ($index_posts as $post):
?>
<h3><?= "<a href='post.php/?id='". $post['id'] . ">" . $post['title'] . "</a>"; ?></h3> 
<?php
    endforeach;
?>

我也尝试过这样写:

<?= "<a href='post.php/?id=$post['id']'>$post['title']</a>"; ?>

但是当用崇高的文本 2 写在['id']周围时,它会显示错误,并['title']任何想法,因为它们是单引号?

有没有另一种更干净的方法可以写这个?

你可以

这样做:

<?php foreach ($index_posts as $post): ?>
<h3>
  <a href="post.php?id=<?php echo $post['id']; ?>">
    <?php echo $post['title']; ?>
  </a>
</h3> 
<?php endforeach; ?>

Sublime 执行此操作时显示错误的原因

<?= "<a href='post.php/?id=$post['id']'>$post['title']</a>"; ?>

这是因为这是一个语法错误,因为您不能像这样直接将复杂变量(例如带有键字符串的数组值)内插到字符串中。 您需要将它们包装在{}

<?= "<a href='post.php/?id={$post['id']}'>{$post['title']}</a>"; ?>

或者,您可以使用:

foreach ($posts as $post) {
    printf('<a href="post.php/?id=%s">%s</a>', $post['id'], $post['title']);
} 
<?php foreach ($index_posts as $post): ?>
    <h3> 
        <a href='post.php/?id=<?=$post['id']?>'>
           <?=$post['title']?>
        </a>
    </h3> 
<?php endforeach; ?>

尽可能将其保留为 HTML;除非需要,否则我宁愿不"回显"HTML,尽管这个问题实际上与偏好有关。毕竟,PHP是一种模板语言!

必须帮助一个山姆同胞...

<?php echo "<h3><a href='"post.php?id={$post['id']}'">{$post['title']}</a></h3>"; ?>