我有一张桌子:
| header_row | cell_usr_a | cell_usr_b | cell_fixed_a | cell_fixed_b |
| second_row |...
| usr_row_a |...
| usr_row_b |...
| usr_row_c |...
此示例中的前两个列(cell_usr *)来自动态对象(x个条目的数组);可能有0个或多个;最后两列总是在那里。
前两行始终存在(元素名称和其他常规属性)。 usr_row *依赖于动态对象中的元素:如果数组中的某个元素具有相应的属性集,则显示该行,否则我不显示。
如何有效地迭代对象而不必为每一行重新迭代?
目前我做
foreach ($array as $element)
每行,根据$ array的大小添加。 然后我需要首先遍历所有$元素以查看是否设置了usr_row属性,如果是,则构造行......
关于如何有效地(并且可能优雅地)做到这一点的任何想法? 顺便说一下,它不一定是一张桌子。
编辑:更多代码来帮助说明我的问题 $ packages是对象,它基本上是一个元素数量未知的数组
<table>
<tr><!-- header row -->
<td>Package name</td>
<?php foreach($packages as $pkg) {
echo '<td>'.$pkg->package_name . '</td>';
} ?>
<td>fixed value</td><!-- cell_fixed_a -->
<td>no value</td><!-- cell_fixed_b -->
</tr>
<tr><!-- second row -->
<td>Count</td>
<?php foreach($packages as $pkg) {
echo '<td>'.$pkg->count . '</td>';
} ?>
<td>fixed value</td><!-- cell_fixed_a -->
<td>fixed value</td><!-- cell_fixed_b -->
</tr>
<tr><!-- usr_row_a
HERE I ONLY NEED TO HAVE THIS ROW IF any one of $pkg has prop set
-->
<?php foreach($packages as $pkg) {
if ($pkg->prop) {
echo '<tr><td>Property name</td>';
echo '<td>'. $pkg->prop . '</td>';
}
</tr>
</table>
答案 0 :(得分:0)
您不需要循环$packages
3次..您只需将结果保存在变量中
$name = "";
$count = "";
$property = "";
foreach ( $packages as $pkg ) {
$name .= '<td>' . $pkg->package_name . '</td>';
$count .= '<td>' . $pkg->count . '</td>';
if ($pkg->prop) {
$property .= '<tr><td>Property name</td>';
$property .= '<td>' . $pkg->prop . '</td>';
}
}
你可以echo
他们是各自的地方......