我想使用for循环访问同一类的10个对象。 原因是我想制作一个数据表,我不觉得手工编写表格中每一行(对象)的所有html标记都是正确的。
我的代码是:
<?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(例如)更改为$ office [$ i] - &gt; pc或类似的东西,但似乎不起作用。我还在php手册中搜索了对象迭代,但这并没有帮助。
对象的数量是固定的(10),属性已经计算好并准备好被回显。
答案 0 :(得分:2)
您可以使用特殊语法来引用您的变量。这个:
<?php echo ${'office'.$i}->pc;?>
答案 1 :(得分:1)
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
// ...
}
答案 2 :(得分:1)
foreach( array( $office1, $office2, $o3, $o4) as $o ) {
?>
...
... <?php echo $o->pc;?> ...
<?php
}
根据需要扩展阵列。对象变量包含一个引用该对象的句柄,因此这是一个廉价的操作而不是副本。
答案 3 :(得分: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>';
}