PHP доступ к ключам массива объектов SimpleXMLElement - PullRequest
1 голос
/ 05 января 2012

В следующем объекте SimpleXMLElement $results я хотел бы удалить элемент с идентификатором 13011146 из массива TEST. Я не уверен, как правильно получить доступ к ключу массива со значением 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 голосов
/ 04 марта 2014

Попробуйте это:

   $sxe = new SimpleXMLElement($xml);
   foreach ($sxe->children() as $child){
      foreach($child as $key=>$item){
         echo $key.': '.$item.'<br />';
      }
   }
0 голосов
/ 05 января 2012

попробуйте

$node = $results->children();
unset($node[1]);
0 голосов
/ 23 декабря 2013

более элегантный способ; он дает те же результаты без использования $ attribute ['@attributes']:

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

Для конкретной пары ключ / значение мы можем использовать:

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

Надеюсь, это поможет!

0 голосов
/ 05 января 2012
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]);    
        }
    }
}
...