2012-05-07 4 views

ответ

10

Просто брось в массив:

$arr = (array) $obj; 
+0

Полезный, но не решение оригинального вопроса. – micrub

1

Xml данные в вопросе не является действительным.

  1. Он не имеет корневой элемент
  2. CustomerId = "1234567" LoginID = "1234567" ломает XML разборе

Вы должны обернуть его в корневой элемент, решить проблему атрибутов, чем вы можете использовать простой XML-парсер для генерации объекта, который может быть преобразован в массив.

Пример

$o = new stdClass(); 
$o->customerdata = '<TPSession userid="22" CustomerId="123456"LoginId="123456" /><TPSession userid="26" CustomerId="1234567"LoginId="1234567" />'; 
function wrap($xml) { 
    return sprintf ('<x>%s</x>', $xml); 
} 
function fix($xml) { 
    return str_ireplace ('"LoginId', "\" LoginId", $xml); 
} 

$xml = wrap (fix ($o->customerdata)); 
$sx = new SimpleXMLElement ($xml); 
$sx = (array) $sx; 
$sx = $sx ['TPSession']; 
foreach ($sx as $row) { 
    var_dump ((array) $row); 
} 
0

Если я понимаю, что вы хотите, чтобы преобразовать строку, содержащуюся в элементе объекта в массив, другими словами, преобразовать строку XML в массив.

Это то, что вы ищете ...

http://php.net/manual/en/function.simplexml-load-string.php

Следуйте примеру на этой странице.

Смежные вопросы