我试图迭代看起来像这样的SimpleXMLElement:
Array
(
[transactionResultStatus] => SimpleXMLElement Object
(
)
[cardTransactionResult] => SimpleXMLElement Object
(
[transactionID] => SimpleXMLElement Object
(
)
[authorizationCode] => SimpleXMLElement Object
(
)
[cvv2ResultCode] => SimpleXMLElement Object
(
)
[roundTripNVPS] => SimpleXMLElement Object
(
[roundTripNVP] => SimpleXMLElement Object
(
[com.pdc4u.webservices.gps.RoundTripNVP] => SimpleXMLElement Object
(
[rtName] => employee
[rtValue] => gomer@gomer.org
)
)
)
)
[checkTransactionResult] => SimpleXMLElement Object
(
)
[checkStatusUpdateResult] => SimpleXMLElement Object
(
[newStatus] => SimpleXMLElement Object
(
)
[transactionID] => SimpleXMLElement Object
(
)
[roundTripNVPS] => SimpleXMLElement Object
(
)
)
[transactionErrors] => SimpleXMLElement Object
(
[transactionError] => SimpleXMLElement Object
(
[webservices.TransactionError] => Array
(
[0] => SimpleXMLElement Object
(
[code] => 10003
[description] => Value 23 for field Address.ZipPlusFour is not valid.
)
[1] => SimpleXMLElement Object
(
[code] => 10003
[description] => Value 23 for field Address.ZipPlusFour is not valid.
)
)
)
)
)
这是我目前用于迭代的内容。我想要做的是消除尽可能多的foreach循环。我可以把它写成递归函数,但我觉得应该有一种更简单有效的方法。
$counter = 0;
foreach($reporting->results['vendorResponse'] as $key => $value)
{
if($value->count() != 0)
{
foreach($value->children() as $value2)
{
if($value2->count() != 0)
{
foreach($value2->children() as $value3)
{
if($value3->count() != 0)
{
foreach($value3->children() as $value4)
{
if($value4->count() != 0)
{
foreach($value4->children() as $value5)
{
if($value5->count() != 0)
{
echo "this is extremely inefficient!";
}
else
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value5->getName().'</td>
<td style="vertical-align:top;">'.$value5.'</td>
</tr>';
++$counter;
}
}
}
else
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value4->getName().'</td>
<td style="vertical-align:top;">'.$value4.'</td>
</tr>';
++$counter;
}
}
}
else
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value3->getName().'</td>
<td style="vertical-align:top;">'.$value3.'</td>
</tr>';
++$counter;
}
}
}
else
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value2->getName().'</td>
<td style="vertical-align:top;">'.$value2.'</td>
</tr>';
++$counter;
}
}
}
else
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value->getName().'</td>
<td style="vertical-align:top;">'.$value.'</td>
</tr>';
++$counter;
}
}
任何帮助都会很棒!
答案 0 :(得分:0)
事实证明,simpleXMlElement每次或多或少都是相同的,所以我最终只是硬编码:
$counter = 0;
$simpleXmlElement = $reporting->results['vendorResponse'];
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$simpleXmlElement['transactionResultStatus']->getName().'</td>
<td style="vertical-align:top;">'.$simpleXmlElement['transactionResultStatus'].'</td>
</tr>';
++$counter;
if($_GET['product'] == 'CREDIT')
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$simpleXmlElement['cardTransactionResult']->transactionID->getName().'</td>
<td style="vertical-align:top;">'.$simpleXmlElement['cardTransactionResult']->transactionID.'</td>
</tr>';
++$counter;
if($simpleXmlElement['cardTransactionResult']->cardToken->getName() != "")
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$simpleXmlElement['cardTransactionResult']->cardToken->getName().'</td>
<td style="vertical-align:top;">'.$simpleXmlElement['cardTransactionResult']->cardToken.'</td>
</tr>';
++$counter;
}
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$simpleXmlElement['cardTransactionResult']->authorizationCode->getName().'</td>
<td style="vertical-align:top;">'.$simpleXmlElement['cardTransactionResult']->authorizationCode.'</td>
</tr>';
++$counter;
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$simpleXmlElement['cardTransactionResult']->cvv2ResultCode->getName().'</td>
<td style="vertical-align:top;">'.$simpleXmlElement['cardTransactionResult']->cvv2ResultCode.'</td>
</tr>';
++$counter;
foreach($simpleXmlElement['cardTransactionResult']->roundTripNVPS->roundTripNVP->children() as $value)
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value->rtName.'</td>
<td style="vertical-align:top;">'.$value->rtValue.'</td>
</tr>';
++$counter;
}
}
else if($_GET['product'] == 'CHECK')
{
if($simpleXmlElement['checkTransactionResult']->count() != 0)
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$simpleXmlElement['checkTransactionResult']->transactionID->getName().'</td>
<td style="vertical-align:top;">'.$simpleXmlElement['checkTransactionResult']->transactionID.'</td>
</tr>';
++$counter;
foreach($simpleXmlElement['checkTransactionResult']->roundTripNVPS->roundTripNVP->children() as $value)
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value->rtName.'</td>
<td style="vertical-align:top;">'.$value->rtValue.'</td>
</tr>';
++$counter;
}
}
if($simpleXmlElement['checkStatusUpdateResult']->count() != 0)
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$simpleXmlElement['checkStatusUpdateResult']->transactionID->getName().'</td>
<td style="vertical-align:top;">'.$simpleXmlElement['checkStatusUpdateResult']->transactionID.'</td>
</tr>';
++$counter;
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$simpleXmlElement['checkStatusUpdateResult']->newStatus->getName().'</td>
<td style="vertical-align:top;">'.$simpleXmlElement['checkStatusUpdateResult']->newStatus.'</td>
</tr>';
++$counter;
foreach($simpleXmlElement['checkStatusUpdateResult']->roundTripNVPS->roundTripNVP->children() as $value)
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value->rtName.'</td>
<td style="vertical-align:top;">'.$value->rtValue.'</td>
</tr>';
++$counter;
}
}
}
foreach($simpleXmlElement['transactionErrors']->transactionError->children() as $value)
{
echo '<tr class="'.($counter % 2 == 0 ? 'evenrow' : 'oddrow').'">
<td style="vertical-align:top;">'.$value->code.'</td>
<td style="vertical-align:top;">'.$value->description.'</td>
</tr>';
++$counter;
}