2012-02-23 28 views
0

我想使用for循環來訪問同一類的10個對象。 原因是我想製作一個數據表,並且我沒有發現手工編寫表格上每行(對象)的所有html標記是正確的。參考php中的循環內的對象

我的代碼是:

<?php 
    for ($i=1;$i<=10;$i++){ 
?> 
     <tr> 
      <td><? echo $i;?></td><td><?php echo $office1->pc;?></td> 
      <td><?php echo $office1->pc*$office1->pcPowerPerUnit;?></td> 

      <td><? echo $office1->printer;?></td> 
      <td><?php echo $office1->printer*$office1->printerPowerPerUnit;?></td> 

      <td><? echo $office1->lights;?></td> 
      <td><?php echo $office1->lights*$office1->lightsPowerPerUnit;?></td> 

      <td><? echo $office1->aircondition;?></td> 
      <td><?php echo $office1->aircondition*$office1->airconPowerPerUnit;?></td> 

      <td><? echo $office1->server;?></td> 
      <td><?php echo $office1->server*$office1->serverPowerPerUnit;?></td> 

     </tr> 
    <?php } ?> 

我認爲可以做的是改變引用$ office1-> PC(例如)至$辦公室[$ i] - >計算機或者類似的東西但這似乎並不奏效。我也在php手冊中搜索了對象迭代,但這沒有幫助。

對象的數量是固定的(10),並且屬性已經計算好了並且可以回顯出來。

+0

您需要告訴我們,$ office1是什麼?它是一個對象還是數組? – Churk 2012-02-23 18:02:38

+0

是否所有對象名稱相同,基本上都是$ office1,$ office2等等? – davethegr8 2012-02-23 18:03:17

+0

是的,只要它是一個包含對象的數組,就可以執行'$ office1 [$ i] - > pc''。這個問題可能是什麼,是你把PHP扔進你的PHP。您需要在'for'循環後關閉php標記 – Bot 2012-02-23 18:03:33

回答

2

您可以使用特殊的語法來引用您的變量。泰這樣的:

<?php echo ${'office'.$i}->pc;?>

+0

哇!有效。所以就這麼簡單... – sotoz 2012-02-23 18:20:50

1

使用variable variables

for ($i = 1; $i <= 10; $i++) { 
    // ... 

    $officeVar = 'office' . $i; 

    // Now you can use $officeVar as a variable variable: 
    $$officeVar->pc; 
    // equivalent to: 
    $office1->pc; 
    // when $i == 1 

    // ... 
} 
+0

好,謝謝。事實上,變量變量在這個場合非常有用,我可以看到,但我使用了$ {'office'。$ i} - > pc技巧,它工作得很好。 – sotoz 2012-02-23 18:23:19

+1

@SotirisGanouris:'$ {'office'。 $ i} - > pc'語法基本上是做同樣的事情,只有沒有臨時變量。這都是動態變量名稱解析。 :-) – FtDRbwLXw6 2012-02-23 18:27:05

1
foreach(array($office1, $office2, $o3, $o4) as $o) { 
    ?> 
    ... 
     ... <?php echo $o->pc;?> ... 

<?php 
} 

擴展陣列根據需要。對象變量包含一個引用對象的句柄,所以這是一個便宜的操作,而不是副本。

1

首先列輸出值存儲到一個數組:

$columns = array($i, $office->pc, $office->pc*$office->pcPowerPerUnit, ...); 

您可以輸出獨立的值的列中的變量:

echo '<tr><td>', implode('</td><td>', $columns), '</td></tr>'; 

剩下的唯一事情就是你遍歷所有你擁有的變量。兩者的數組比使用$office1$office10好得多:

foreach($offices as $i => $office) 
{ 
    $columns = array($i, $office->pc, $office->pc*$office->pcPowerPerUnit, ...); 
    echo '<tr><td>', implode('</td><td>', $columns), '</td></tr>'; 
} 

完成。但是,如果您因某種原因不想更改(例如,一次不會更改太多),您可以執行類似操作:

foreach(range(1, 10) as $i) 
{ 
    $office = ${'office'.$i}; 
    $columns = array($i, $office->pc, $office->pc*$office->pcPowerPerUnit, ...); 
    echo '<tr><td>', implode('</td><td>', $columns), '</td></tr>'; 
}