如何将第一个foreach语句的输出放在表中的一列中,将另一个foreach语句的输出放在另一列中。我尝试了一些东西,但由于某种原因它把它全部放在一列中。这是我的代码:
<table border="0" align="center">
<?php
foreach($anchors as $a) {
$text = $a->nodeValue;
$href = $a->getAttribute('href');
$i++;
if ($i > 16) {
if (strpos($text, "by owner") === false) {
if (strpos($text, "map") === false) {
echo "<tr><td><a href =' ".$href." '>".$text."</a><br/></td></tr>";
}
}
}
foreach($span as $s) {
echo "<tr><td>".$s->nodeValue."</td></tr>";
}
}
?>
</table>
答案 0 :(得分:2)
<tr></tr>
标记了一行。 <td></td>
标记了一列。要制作2列,每次迭代只使用一组<tr>
个标记,并在它们之间放置两组<td></td>
。
那就是说$span
究竟是什么?它是否包含与$anchors
相同数量的元素,并且您希望每行显示一个项目?如果是这样,您需要稍微重新构建代码。有几种方法可以做到这一点 - 这是一个简单的方法:
<table border="0" align="center">
<?php
$i = 0;
foreach($anchors as $a) {
echo "<tr>";
$text = $a->nodeValue;
$href = $a->getAttribute('href');
if ($i >= 16) {
if (strpos($text, "by owner") === false) {
if (strpos($text, "map") === false) {
echo "<td><a href =' ".$href." '>".$text."</a><br/></td>";
}
}
} else {
echo "<td></td>"; #output a blank cell in the first column
}
echo "<td>" . $span[$i]->nodeValue . "</td>";
echo "</tr>";
++$i
}
?>
</table>
编辑:看起来你的$span
是一个DOMNodeList对象,而不是一个数组。我没有这方面的经验,但看起来您可以使用DOMNodelist::item
函数获取列表中的当前项目(请参阅http://php.net/manual/en/domnodelist.item.php):
echo "<td>" . $span->item($i)->nodeValue . "</td>";
因此,请尝试在我的答案中更改相应的行。
答案 1 :(得分:1)
如果不了解数据就很难,但这可能是这样的:
// start a table
echo '<table>';
// for as long as there are elements in both span and anchors
for ($i=0; $i < $anchors->length && $i < $span->length; $i++) {
// start a new table row
echo '<tr>';
// get the current span and anchor
$a = $anchors->item($i);
$s = $span->item($i);
// print them
$text = $a->nodeValue;
$href = $a->getAttribute('href');
// col 1, number
echo '<td>'.$i.'</td>';
// col 2, anchor
echo '<td><a href ="' .$href. '">'.$text.'</a></td>';
// col 3, span
echo '<td>'.$s->nodeValue.'</td>';
// close the table row
echo '</tr>';
}
// close the table
echo '</table>';
(代码未经测试)没有实际数据很难更具体。
一些提示/备注/旁注可能对您有所帮助:
- 请注意,我使用单引号,因为它们更好
性能(双引号将由php解释)
- 尝试尽可能使用小循环(for,while,foreach)。他们是一个强大的
工具,但可以快速消耗记忆和性能!
- 如果使用多个维度(数组内部的数组),只有嵌套循环,
这不是这种情况(我认为)
- 尝试限制嵌套块的数量(如果在内部,如果在内部循环,则为内部)。我试着永远不会超过2级(这不是绝对的规则,只是一个很好的标准)。如果不可能创建一个功能。
- 评论您的代码!我很难理解您的代码(我每天都会以PHP为生),我可以想象您将在几周内完成。评论可能看起来像浪费时间,但它会简化调试,并且在以后更新您的(或其他人)代码时是一种祝福!
修改强>
我刚刚注意到你没有使用DOMNodeList而不是数组,所以我更新了我的代码。应该工作正常,并且代码更清晰。就像我说的那样,没有看到数据就很难......