2014-03-05 60 views
1
$data = new Data(); 
$data->Date='29-07-1902'; 
$data->Person='Elton John'; 
$data->Costs[]=array('Expense','100 EUR'); 
$data->Costs[]=array('Tax','250 EUR'); 

我想通过此对象进行迭代并将其显示为HTML表格。以下是我迄今的尝试。在迭代通过php对象与数组时遇到困难

<table border="1" style="width:300px"> 
    <?php 
foreach($data as $key => $value) { 
    echo "<tr><td> $key </td> <td> $value</td></tr>"; 
} 
echo "\n"; 
?> 
    </table> 

我想通过函数完成这个任务。另外,不同的成本应该出现在新行中,所以费用有它自己的行,而税有它自己的行。

回答

0

你的数组实际上是multimensional所以你需要循环再次在您的值是数组,如果我理解你正确的,这是你所需要的

<table border="1" style="width:300px"> 
<?php 
foreach($data as $key => $value) { 
    if(is_array($value)) 
    { 
     echo "<tr><td> $key </td> <td></td></tr>"; 
     foreach($value as $kk => $val) 
     { 
      echo "<tr><td> $kk </td> <td> $val</td></tr>"; 
     } 
    } else { 
     echo "<tr><td> $key </td> <td> $value</td></tr>"; 
    } 
} 
echo "\n"; 
?> 
</table> 
+0

你的'foreach'没有关闭。 –

+0

对,谢谢你纠正这 – Fabio

0

没有可能是最好的方法,但尝试:

<table border="1" style="width:300px"> 
<?php 
foreach($data as $key => $value) { 

    echo "<tr><td> $key </td> <td> $value</td></tr>"; 
    if(is_array($value)==true){ 
     foreach($value as $ind){ 
      echo "<tr>"; 
      if(is_array($ind)==true){ 
       foreach($ind as $i=>$v){ 
       echo "<td> $v </td>"; 
       } 
      } 
      echo "</tr>"; 
     } 
    } 
} 
echo "\n"; 
?> 
</table> 

但是,如果你的$data->Costs[]具有了内阵列状array('Expense',array('100 EUR','50 EUR'));

+0

确定那种工作。现在第1列“Costs”的行有“Array”作为第2列,我希望它是空的。另外什么是最好的方法,我试图用一个函数来做到这一点,我可以使用任何对象。 – Elton

+0

@Elton您传递给函数的数组结构是否保持不变或者它是否也有嵌套数组? –

0
<table border="1" style="width:300px"> 
    <?php 
foreach ($data as $key => $value) { 
if (!is_array($value)) { 
    echo "<tr><td> $key </td> <td> $value</td></tr>"; 
} else { 
    echo "<tr><td colspan='2'>$key</td></tr>"; 
    foreach ($value as $val) { 
    echo "<tr><td> $val[0] </td> <td> $val[1]</td></tr>"; 
    } 
} 
} 
?> 
</table> 
这是不行的

这将工作在你的特定情况下(如果数组长度不会改变)...但是,不确定通用解决方案,但你可以稍微调整一下(计数数组值,格式表等等).. 。:)