私はなぜこれが起こっているのか(私が認めたいよりもかなり多くの時間を費やした)と本当に混乱しています。基本的に、Dateに到達すると、配列に日付は追加されませんが、Timeは完全に問題ありません。
XMLコードの例
<xml>
<Route id="1">
<itdDateTime>
<itdDate day="28" month="10" year="2012" weekday="-1"/>
<itdTime hour="12" minute="53"/>
</itdDateTime>
</Route>
<Route id="2">
<itdDateTime>
<itdDate day="3" month="12" year="2012" weekday="-1"/>
<itdTime hour="8" minute="14"/>
</itdDateTime>
</Route>
<Route id="3">
<itdDateTime>
<itdDate day="3" month="12" year="2012" weekday="-1"/>
<itdTime hour="9" minute="16"/>
</itdDateTime>
</Route>
PHPコード例
foreach($route->childNodes as $node) {
if ($node->nodeName == 'itdDateTime') {
foreach ($node->childNodes as $child) {
$dateAttr = $child->attributes;
$x[$i]['leave'] = array();
$x[$i]['leave']['date'] = array();
$x[$i]['leave']['time'] = array();
foreach ($dateAttr as $index=>$attr) {
$x[$i][$attr->nodeName] = $attr->nodeValue;
if ($index == 'minute' || $index == 'hour') {
$x[$i]['leave']['time'][$attr->nodeName] = $attr->nodeValue;
} else {
$x[$i]['leave']['date'][$attr->nodeName] = $attr->nodeValue;
}
}
}
}
}
配列の例
Array
(
[0] => Array
(
[active] => 1
[delete] => 0
[changes] => 2
[distance] => 966
[alternative] => 0
[publicDuration] => 01:19
[individualDuration] => 00:22
[print] => 0
[routeIndex] => 1
[hasFrequency] => 1
[routeTripIndex] => 1
[cTime] => 20121028113640847
[searchMode] => 1
[vehicleTime] => 53
[method] => itp
[selected] => 1
[leave] => Array
(
[date] => Array
(
)
[time] => Array
(
[hour] => 12
[minute] => 53
)
)
[day] => 28
[month] => 10
[year] => 2012
[weekday] => 1
[hour] => 12
[minute] => 53
)
問題
つまり、基本的に問題は、日付(日、月、平日)を[leave] [date] ..(例)[leave][date][day]に入力する必要があるということです。
IFステートメントがなくても、それを[leave]配列に入力するだけでは、たとえば機能しません。
$x[$i]['leave'][$attr->nodeName] = $attr->nodeValue;
したがって、Imは基本的に不明であり、最初の配列に表示される理由を理解していません(例のようにLeaveの横など)
$x[$i][$attr->nodeName] = $attr->nodeValue;
これに関するアドバイスや助けをいただければ幸いです。