二维数组

时间:2013-10-09 13:59:12

标签: php arrays

我在尝试之前试图自己找到这个,但不能真正弄明白。

我所拥有的是一个循环,它实际上是一个用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,并且不知道多维数组如何工作:)

谢谢

1 个答案:

答案 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是乏味的 - 在委员会会议室做了另一个设计决定: - )