【问题标题】:Efficient looping [closed]高效循环[关闭]
【发布时间】:2018-07-10 19:05:51
【问题描述】:

我有一张桌子:

| 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 的大小添加。 然后我需要首先再次遍历所有 $element 以查看是否设置了 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>

【问题讨论】:

  • 很难想象你在问什么——你能展示一些代码吗?还想到这可能更适合codereview.stackexchange.com
  • var_dump($your_object) 的输出是什么?
  • 您能否使用 print_r 添加有关数组结构和所需输出的更多信息,以便我获得更好的图片

标签: php html-table


【解决方案1】:

你不需要循环$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他们是各自的地方...

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 2012-03-19
    • 2016-01-03
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2019-11-06
    相关资源
    最近更新 更多