Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配的XML属性在PHP if语句中不匹配_Php_Xml - Fatal编程技术网

匹配的XML属性在PHP if语句中不匹配

匹配的XML属性在PHP if语句中不匹配,php,xml,Php,Xml,我试图循环使用一些XML,如果属性值与循环上一次迭代中的值匹配或不匹配,则执行一个操作 传入数据已按类排序 下面是一些示例XML和代码 <character_list> <character id="00001"> <name first="Name1"/> <type class="Class A" classid="1"/> </character> <character

我试图循环使用一些XML,如果属性值与循环上一次迭代中的值匹配或不匹配,则执行一个操作

传入数据已按类排序

下面是一些示例XML和代码

<character_list>
    <character id="00001">
        <name first="Name1"/>
        <type class="Class A" classid="1"/>
    </character>
    <character id="00002">
        <name first="Name2"/>
        <type class="Class A" classid="1"/>
    </character>
    <character id="00003">
        <name first="Name3"/>
        <type class="Class B" classid="2"/>
    </character>
    <character id="00004">
        <name first="Name4"/>
        <type class="Class B" classid="2"/>
    </character>
    <character id="00005">
        <name first="Name5"/>
        <type class="Class B" classid="2"/>
    </character>
    <character id="00006">
        <name first="Name6"/>
        <type class="Class C" classid="3"/>
    </character>
    <character id="00007">
        <name first="Name7"/>
        <type class="Class D" classid="4"/>
    </character>
    <character id="00008">
        <name first="Name8"/>
        <type class="Class D" classid="4"/>
    </character>
</character_list>
预期产量

Class A - Name1 Name2 
Class B - Name3 Name4 Name5 
Class C - Name6 
Class D - Name7 Name8

有人能看到我做错了什么以及如何纠正它吗?

假设传入的数据没有排序,因为您无论如何都不应该依赖xml中的物理排序,然后在处理时不要直接打印,而是存储在散列或数组中。然后根据需要分组打印。

只需将值强制转换为如下字符串:

foreach ($dataobj as $xmldata) {

    $currentclass = (string) $xmldata->type['classid'];

    if ($lastclass == $currentclass) {
            echo $xmldata->name['first']." ";
    }
    else
    {
            echo "<br>";
            echo $xmldata->type['class']." - ";
            echo $xmldata->name['first']." ";
    }

    $lastclass = (string) $xmldata->type['classid'];
}
foreach($dataobj作为$xmldata){
$currentclass=(字符串)$xmldata->type['classid'];
如果($lastclass==$currentclass){
echo$xmldata->name['first']。“”;
}
其他的
{
回声“
”; echo$xmldata->type['class']。“-”; echo$xmldata->name['first']。“”; } $lastclass=(字符串)$xmldata->type['classid']; }

没有强制转换,您是在比较simplexml对象。

啊,是的,我应该补充一点,传入的数据已经被分类了,这在处理xml时在语义上是错误的,并且必然会导致错误和问题。如果希望xml记录按特定顺序排列,可能应该引入一个属性。否则,您就是在“黑客”xml。
Class A - Name1 Name2 
Class B - Name3 Name4 Name5 
Class C - Name6 
Class D - Name7 Name8
foreach ($dataobj as $xmldata) {

    $currentclass = (string) $xmldata->type['classid'];

    if ($lastclass == $currentclass) {
            echo $xmldata->name['first']." ";
    }
    else
    {
            echo "<br>";
            echo $xmldata->type['class']." - ";
            echo $xmldata->name['first']." ";
    }

    $lastclass = (string) $xmldata->type['classid'];
}