Php For循环将xml解析为表

Php For循环将xml解析为表,php,xml,for-loop,foreach,Php,Xml,For Loop,Foreach,下面是我使用simpleXML解析的XML响应的一部分。我需要创建一个如下示例所示的表,但我不确定如何实现这一点 $roomCategory =' <ChargeConditions> <ChargeCondition Type="cancellation"> <Condition Charge="true" ChargeAmount="2730.00" Currency="USD" FromDay="0" ToDay="0"/> <Condi

下面是我使用simpleXML解析的XML响应的一部分。我需要创建一个如下示例所示的表,但我不确定如何实现这一点

$roomCategory ='
<ChargeConditions>
 <ChargeCondition Type="cancellation">
  <Condition Charge="true" ChargeAmount="2730.00" Currency="USD" FromDay="0" ToDay="0"/>
  <Condition Charge="true" ChargeAmount="390.00" Currency="USD" FromDay="1" ToDay="2"/>
  <Condition Charge="false" FromDay="3"/>
 </ChargeCondition>
 <ChargeCondition Type="amendment">
  <Condition Charge="false" FromDay="0"/>
 </ChargeCondition>
</ChargeConditions>';
我遇到了一个问题,因为ammentcondition出现在另一个节点中,我正在尝试这样做,但我不确定我是否在正确的轨道上,以及如何回显所有内容以形成上表

更新代码:

$chargeConditions = $roomCategory->ChargeConditions;
echo '<table>';
echo '<tr>';
echo '<th></th>';
foreach ($chargeConditions->ChargeCondition as $condition) {
  echo '<th>' . ucfirst($condition['Type']) . '</th>';
}
echo '</tr>';
echo '<tr>';
$val = array();
$c = 0;
foreach ($chargeConditions->ChargeCondition as $condition) {
  $val[$c][0] = $condition["Type"];
  $charges = $condition->Condition;
  var_dump($charges);
  foreach($charges as $charge){
    if($charge["Charge"] !== "false"){
   $val[$c][1] = $charge["FromDay"];
   $val[$c][2] = $charge["ToDay"];
   $val[$c][3] = $charge["ChargeAmount"];
     }
  }
   $c++;
 }

for($x=0; $x <= $c; $x++){
 echo '<tr>';
 echo '<td>From Day' . $val[$x][1] .'<br>To Day' . $val[$x][2] . '</td>';
 echo '<td>' . $val[$x][3] . '</td>';
 echo '<td>' . $val[$x+1][3] . '</td>';
 echo '</tr>';
}
echo '</table>';
var_dump($charges)提供以下输出:

object(SimpleXMLElement)#455 (1) { ["@attributes"]=> array(5) { ["Charge"]=> string(4) "true" ["ChargeAmount"]=> string(7) "2730.00" ["Currency"]=> string(3) "USD" ["FromDay"]=> string(1) "0" ["ToDay"]=> string(1) "0" } } object(SimpleXMLElement)#504 (1) { ["@attributes"]=> array(2) { ["Charge"]=> string(5) "false" ["FromDay"]=> string(1) "0" } }

我会把所有的东西都解析成一个数组,它的键是FromDay。。。差不多

$cancellation=array();
$amendment=array();
foreach ($chargeConditions->ChargeCondition as $condition) {
$var = $condition->attributes()->Type;   
    foreach($condition as $child)
    {
         $$var[$child->attributes()->FromDay]=($child->attributes()->Charge)?$child->attributes()->ChargeAmount:"No Charge";
    }

}
一旦阵列就位,只需执行另一个循环

<table><tr><td>&nbsp;</td><td>Cancel</td><td>Ammend</td></tr>
<?php
foreach ($cancellations as $fromDay=>$cancel)
{
?>
<tr>
<td><?php echo $fromDay?></td>
<td><?php echo $cancel?></td>
<td><?php echo isset($ammendment[$fromDay])?$ammendment[$fromDay]:"No Charge"?></td>
</tr>
<?php
}
?>
</table>
CancelAmmend

你确定这样行吗$条件['type']和$condition->condition一起使用???您有一个数组或一个对象。@davidsamiento$condition[“Type”]将输出“Cancelation”,而$condition->condition是
ChargeCondition
节点下的3个
condition
节点的数组。我使用了您的代码,但该表只回显标题“Cancelation”和“amendment”,我已将代码更新为当前版本,但我还无法理解。请确保使用SimpleXMLElement对象,而不是自定义定义的类
$cancellation=array();
$amendment=array();
foreach ($chargeConditions->ChargeCondition as $condition) {
$var = $condition->attributes()->Type;   
    foreach($condition as $child)
    {
         $$var[$child->attributes()->FromDay]=($child->attributes()->Charge)?$child->attributes()->ChargeAmount:"No Charge";
    }

}
<table><tr><td>&nbsp;</td><td>Cancel</td><td>Ammend</td></tr>
<?php
foreach ($cancellations as $fromDay=>$cancel)
{
?>
<tr>
<td><?php echo $fromDay?></td>
<td><?php echo $cancel?></td>
<td><?php echo isset($ammendment[$fromDay])?$ammendment[$fromDay]:"No Charge"?></td>
</tr>
<?php
}
?>
</table>