@Craftist

Перевод из XML в PHP, как передать данные в массив?

Как сделать так, чтобы XML превратился в массив PHP?
Пусть есть файл XML с настройками программы (программа на PHP DevelStudio).
Пусть его содержимое -
<settings>
  <one type="gui" subtype="fullscreen">true</one>
  <two type="gui" subtype="alphablend">255</two>
</settings>

И надо его сформировать в примерно такой массив:
Array
(
  [one] => Array
  (
    'type' => 'gui',
    'subtype' => 'fullscreen',
    'value' => 'true'
  )
  [two] => Array
  (
    'type' => 'gui',
    'subtype' => 'alphablend',
    'value' => '255'
  )
)


То есть, чтобы к настройкам можно было обращаться так:
c("Form1")->alphaBlendValue = $setting['two']['value'];
  • Вопрос задан
  • 599 просмотров
Решения вопроса 1
miraage
@miraage
Старый прогер
$data = <<<XML
<settings>
  <one type="gui" subtype="fullscreen">true</one>
  <two type="gui" subtype="alphablend">255</two>
</settings>
XML;

function parse_xml($data)
{
    $result = [];
    $xml = simplexml_load_string($data);
    
    /** @var SimpleXMLElement $node */
    foreach ($xml as $key => $node) {
        $value = [];
        
        foreach ($node->attributes() as $k => $v) {
            $value[$k] = (string) $v;
        }
        
        $value['value'] = (string) $node;
        
        $result[$key] = $value;
    }
    
    return $result;
}

var_dump(parse_xml($data));


array(2) {
  'one' =>
  array(3) {
    'type' =>
    string(3) "gui"
    'subtype' =>
    string(10) "fullscreen"
    'value' =>
    string(4) "true"
  }
  'two' =>
  array(3) {
    'type' =>
    string(3) "gui"
    'subtype' =>
    string(10) "alphablend"
    'value' =>
    string(3) "255"
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmitryKovalskiy
программист средней руки
Гуглите по запросам "XML to PHP array", "PHP XML deserialize" и прочее. Задача совершенно не уникальна, 100% гуглится, а то и на тостере уже всплывала.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы