-2

私はテーブルを持っています:

| 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  |...

この例の最初の2つの(cell_usr *)は、動的オブジェクト(xエントリの配列)から取得されます。それらの0または多くが存在する可能性があります。最後の2列は常にそこにあります。

最初の2行は常にそこにあります(要素名およびその他の一般的なプロパティ)。usr_row *は、動的オブジェクトの要素に依存します。配列の要素の1つに対応するプロパティが設定されている場合は、行を表示します。それ以外の場合は表示しません。

行ごとに繰り返すことなく、オブジェクトを効率的に繰り返すにはどうすればよいですか?

現在私はします

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>
4

1 に答える 1

0

3回ループする必要はありません$packages..結果を変数に保存するだけです

$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それらがそれぞれの場所であることができます...

于 2012-10-02T16:18:48.220 に答える