我在尝试之前试图自己找到这个,但不能真正弄明白。
我所拥有的是一个循环,它实际上是一个用simplexml_load_file读取XML数据的循环
现在这个XML文件包含我想要读取并放入数组的数据..实际上是一个二维数组..
因此,XML文件中有一个名为Tag的子项,并且有一个名为Amount的子项。 金额总是不同,但标签通常是相同的,但有时也会改变。
我现在要做的是:
示例:
这是XML示例:
<?xml version="1.0"?>
<Data>
<Items>
<Item Amount="9,21" Tag="tag1"/>
<Item Amount="4,21" Tag="tag1"/>
<Item Amount="6,21" Tag="tag2"/>
<Item Amount="1,21" Tag="tag1"/>
<Item Amount="6,21" Tag="tag2"/>
</Data>
</Items>
现在我有一个循环读取这个,看看它是什么标签并加上金额。 它适用于2个循环和两个不同的数组,我希望在一个循环中将它全部放在一个数组中。
我试过这样的事情:
$tags = array();
for($k = 0; $k < sizeof($tags); $k++)
{
if (strcmp($tags[$k], $child['Tag']) == 0)
{
$foundTAG = true;
break;
}
else
$foundTAG = false;
}
if (!$foundTAG)
{
$tags[] = $child['Tag'];
}
然后在代码中的某个地方我尝试了添加到数组的不同变体($ counter是一起计算Amounts的数量):
$tags[$child['Tag']][$k] = $counter;
$tags[$child['Tag']][] = $counter;
$tags[][] = $counter;
我尝试了一些其他组合,我已经删除了,因为它没有工作..
好吧这可能是一个真正的noob问题,但我昨天开始使用PHP,并且不知道多维数组如何工作:)
谢谢
答案 0 :(得分:1)
这是你如何从简单的xml迭代返回的对象:
$xml=simplexml_load_file("/home/chris/tmp/data.xml");
foreach($xml->Items->Item as $obj){
foreach($obj->Attributes() as $key=>$val){
// php will automatically cast each of these to a string for the echo
echo "$key = $val\n";
}
}
所以,要构建一个包含每个标记总数的数组:
$xml=simplexml_load_file("/home/chris/tmp/data.xml");
$tagarray=array();
// iterate over the xml object
foreach($xml->Items->Item as $obj){
// reset the attr vars.
$tag="";
$amount=0;
// iterate over the attributes setting
// the correct vars as you go
foreach($obj->Attributes() as $key=>$val){
if($key=="Tag"){
// if you don't cast this to a
// string php (helpfully) gives you
// a psuedo simplexml_element object
$tag=(string)$val[0];
}
if($key=="Amount"){
// same as for the string above
// but cast to a float
$amount=(float)$val[0];
}
// when we have both the tag and the amount
// we can store them in the array
if(strlen($tag) && $amount>0){
$tagarray[$tag]+=$amount;
}
}
}
print_r($tagarray);
print "\n";
如果架构发生变化或者您决定穿蓝色袜子(xml对颜色非常敏感),这将会非常糟糕。你可以看到处理问题的孩子是xml是乏味的 - 在委员会会议室做了另一个设计决定: - )