我对PHP很陌生,希望有人可以帮我解决以下问题:
我有一个SQL表,我从中获取存储过程的数据。这将返回以下XML。 然后在我的PHP页面上,我将此XML加载为$ objCat,以便使用下面的脚本在网站上回显它。
到目前为止,这只是为了回应类别组而不是属于每个组的项目,即具有相同类别的项目。 我想我需要在这里嵌套另一个foreach循环(我在下面有我的评论),这样它看起来与原始XML相似但却无法使其工作。
我的XML:
<ranks>
<categories>
<categoryX>Category 1</categoryX>
<groupCount>3</groupCount>
<itemID>ID 1</itemID>
<dateX>2013-11-12</dateX>
<subjectX>Subject 11</subjectX>
<itemID>ID 2</itemID>
<dateX>2013-11-05</dateX>
<subjectX>Subject 7</subjectX>
<itemID>ID 3</itemID>
<dateX>2013-10-23</dateX>
<subjectX>Subject 2</subjectX>
</categories>
<categories>
<categoryX>Category 2</categoryX>
<groupCount>2</groupCount>
<itemID>ID 4</itemID>
<dateX>2013-11-27</dateX>
<subjectX>Subject 6</subjectX>
<itemID>ID 5</itemID>
<dateX>2013-10-30</dateX>
<subjectX>Subject 3</subjectX>
</categoryX>
</categories>
// ...
</ranks>
我的PHP:
<?php
foreach ($objCat->categories as $cat) {
$catGroup = $cat->categoryX;
echo $catGroup;
// echo all itemIDs below each other where categoryX = $catGroup.
}
?>
答案 0 :(得分:2)
假设您只有一个级别的嵌套:
$xml = simplexml_load_string($theXML);
foreach ($xml->categories as $cat) {
echo "category: \n";
foreach ($cat as $key => $value) {
echo $key . " " . $value."\n";
}
}
在上面发布的示例xml中修复了错误的结束标记(</categoryX>
)后,我得到以下结果:
category:
categoryX Category 1
groupCount 3
itemID ID 1
dateX 2013-11-12
subjectX Subject 11
itemID ID 2
dateX 2013-11-05
subjectX Subject 7
itemID ID 3
dateX 2013-10-23
subjectX Subject 2
category:
categoryX Category 2
groupCount 2
itemID ID 4
dateX 2013-11-27
subjectX Subject 6
itemID ID 5
dateX 2013-10-30
subjectX Subject 3
答案 1 :(得分:1)
如果你唱的是simplexml,它应该像...一样直接前进。
foreach ($objCat->categories as $cat) {
$catGroup = $cat->categoryX;
echo $catGroup;
$index = 0;
foreach($cat->itemID as $itemID)
{
echo $itemID;
echo $cat->dateX[$index];
echo $cat->subjectX[$index];
$index++;
}
}
如果您可以控制XML结构,我认为您应该以不同的方式嵌套“子”元素......
<categories>
<categoryX>Category 1</categoryX>
<groupCount>3</groupCount>
<childdata>
<itemID>ID 1</itemID>
<dateX>2013-11-12</dateX>
<subjectX>Subject 11</subjectX>
</childdata>
<childdata>
<itemID>ID 2</itemID>
<dateX>2013-11-05</dateX>
<subjectX>Subject 7</subjectX>
</childdata>
<childdata>
<itemID>ID 3</itemID>
<dateX>2013-10-23</dateX>
<subjectX>Subject 2</subjectX>
</childdata>
</categories>
然后你将拥有一个单独的对象,其中包含“childdata”节点每次迭代的所有值...
foreach ($xml->categories as $cat) {
$catGroup = $cat->categoryX;
echo $catGroup;
foreach($cat->childdata as $child)
{
echo $child->itemID;
echo $child->dateX;
echo $child->subjectX;
$index++;
}
}