2012-02-23 5 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 } ?> 

は$事務所[$ i]のへの参照を(例えば)$ office1-> PCを変更することです - そのような> PCか何かしかし、それは動作していないようです。私もPHPのマニュアルでオブジェクトの反復を検索したが、それは役に立たなかった。

オブジェクトの数は固定されており(10)、プロパティはすでに計算されており、エコーアウトする準備ができています。

+0

$ office1とは何ですか?それはオブジェクトか配列ですか? – Churk

+0

すべてのオブジェクトは同じ名前ですが、基本的には$ office1、$ office2などですか? – davethegr8

+0

はい、オブジェクトを含む配列であれば '$ office1 [$ i] - > pc'を実行できます。おそらく問題は、あなたのPHPにHTMLを投げているということです。あなたは 'for'ループの後にphpタグを閉じる必要があります – Bot

答えて

2

特殊な構文を使用して、そのような変数を参照することができます。 TYこの:

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

+0

うわー!出来た。だから、それは簡単だった... – sotoz

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

+1

@SotirisGanouris: '$ {'office'。 $ i} - > pc'構文は基本的に同じことをしています。それはすべて動的変数名解決です。 :-) – FtDRbwLXw6

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>'; 
} 
関連する問題