Foreach 循环嵌套不起作用


Foreach Loop Nesting Isn't Working

所以我正在处理一个表单,我正在使用PHP从数据库中提取一组联系人。由于结果是一个数组,我使用 foreach 循环来回显联系人并继续前进。这是我的代码:

    <p class='contact-list'>
      <?php
        foreach( $contacts as $contact ){
            echo "<p><input type='radio' name='contact' id='contact-{$contact['id']}' value='{$contact['id']}'/>";
            echo " {$contact['name']}</p>";
        }
      ?>
    </p>

我这样做是因为我希望每个联系人都作为子联系人放置在 .contact-list 中,当页面呈现时,源似乎应该是:

<p class='contact-list'>
    <p><input type='radio' ...
    </p>
    <p><input type='radio' ...
    </p>
</p>

事实并非如此。每个联系人都不是 .contact-list 的孩子,而是它的兄弟姐妹,我想知道为什么会发生这种情况。

呈现后页面的源是这样的:

<p class='contact-list'></p>
<p><input type='radio' name=''...
</p>
<p><input type='radio' name=''...
</p>

谁能解释为什么段落标签在 foreach 循环运行之前关闭?

更新:

我决定使用div 而不是段落,然后嵌套工作正常,所以我假设这是段落标签的特征。也就是说,我仍然有兴趣找出段落标签为什么这样做。

因为p是一个只能包含内联元素的块元素。但是你把其他p元素放进去。改用span p s,这应该可以按预期工作

你试过这个吗?

foreach( $contacts as $contact ){
        echo "<span><input type='radio' name='contact' id='contact-{$contact['id']}' value='{$contact['id']}'/>{$contact['name']} </span>";
    }