PHP访问SimpleXMLElement对象数组键

时间:2012-01-05 10:11:52

标签: php simplexml

在下面的SimpleXMLElement对象$results中,我想从TEST数组中删除ID为13011146的元素。我不确定如何正确访问值1的数组键,因此我使用的是计数器$i,但这会给我一个错误Node no longer exists,指向foreach行

TL; DR :你如何取消$result->TEST[1]

SimpleXMLElement Object
(
    [TEST] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [ID] => 13011145
                        )

                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [ID] => 13011146
                        )

                )
        )

)

PHP:

$i = 0;
foreach($results->TEST as $key => $value) {
    if( (string)$value['ID'] == 13011146 ) {
        unset($results->TEST[$i]);
    }
    $i++;
}

4 个答案:

答案 0 :(得分:0)

foreach($results->TEST->children() as $key => $value) { 
    $attributes = $value->attributes();
    foreach($attributes as $a => $b) {
        if (( (string)$a == 'ID' ) && ( (string)$b == '13011146' )) {    
            unset($results->TEST[$key]);    
        }
    }
}

答案 1 :(得分:0)

试试这个

$node = $results->children();
unset($node[1]);

答案 2 :(得分:0)

更优雅的方式;它在不使用$ attributes ['@attributes']的情况下为您提供相同的结果:

$attributes = current($element->attributes());

对于特定的键/值对,我们可以使用:

$attributes = current($value->attributes()->NAME);

希望它有所帮助!

答案 3 :(得分:0)

试试这个:

   $sxe = new SimpleXMLElement($xml);
   foreach ($sxe->children() as $child){
      foreach($child as $key=>$item){
         echo $key.': '.$item.'<br />';
      }
   }