请参阅php中循环内的对象

时间:2012-02-23 17:58:44

标签: php class iteration

我想使用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),属性已经计算好并准备好被回显。

4 个答案:

答案 0 :(得分:2)

您可以使用特殊语法来引用您的变量。这个:

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

答案 1 :(得分: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

    // ...
}

答案 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>';
}