2012-10-02 89 views
-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 |... 

在本例中的前兩列(cell_usr *)來自動態對象(X條目的陣列);可能有0個或多個;最後兩列總是在那裏。 前兩行始終存在(元素名稱和其他常規屬性)。 usr_row *取決於動態對象中的元素:如果數組中的某個元素具有相應的屬性集,則顯示該行,否則我不顯示該行。

我怎樣纔能有效地遍歷對象,而不必重新迭代每一行?

目前我做

foreach ($array as $element) 

的每一行,根據$數組的大小增加。 然後,我需要再次遍歷所有的$元素,看看是否設置了usr_row屬性,如果是,則構造該行...

有關如何有效地完成此操作的任何想法(也可能優雅) ?謝謝! 它不一定是一個表btw。

編輯:一些更多的代碼來幫助說明我的問題 $包是對象,它基本上與未知數量的元素

<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> 
+3

這是相當困難想象你在問什麼 - 你能展示一些代碼嗎?另外想到這可能更適合http://codereview.stackexchange.com/ – DaveRandom

+1

var_dump($ your_object)'的輸出是什麼? – Jocelyn

+0

您可以使用print_r添加更多關於數組結構和所需輸出的信息,以便我可以獲得更好的圖片 – Baba

回答

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他們是各自地方...