2012-02-25 2 views
0

Я пытаюсь проанализировать XML-документ в php, что несколько сложно, потому что xml состоит из объектов внутри объектов. Вот xml:разбор и запись xml с PHP

<Bars> 
<Bar> 
<BarName>the bar name</BarName> 
<bar_id>0</bar_id> 
<Bartenders> 
<Bartender><fname>a first name</fname><lname>a last name</lname><imageURL>an image url</imageURL><shift>2</shift></Bartender> 
</Bartenders> 
<Events> 
<Event><EventName> event</EventName><date>08/10/1989</date></Event> 
</Events> 
<Specials> 
<Special> Special 1</Special><Special> Special 2</Special> 
</Specials> 
</Bar> 

Очевидно, что есть несколько из этих «барных» объектов внутри элемента xls. Я пытаюсь понять, как это сделать, это проанализировать этот файл, сохранить содержимое в массиве, обновить массив с помощью пользовательского ввода из приложения iOS и, наконец, записать XML обратно на страницу. Проблема, с которой я сталкиваюсь, заключается в том, как я смогу сохранить несколько массивов «бармен», «событие» и «специальный» в массивах для соответствующей панели? Мне нужно будет создать массив барменов в массиве foreach правильно? Нужно ли мне создавать класс бара, в котором размещаются бармен, события и специальные массивы?

Вот часть моего кода PHP до сих пор:

Как вы можете видеть, я это понял, довольно легко, если это только один тип элемента в строке. Я ничего не могу сделать, потому что не знаю, сколько барменов, баров, спецпредложений и т. Д. Вывешивается в определенное время ... Спасибо за вашу помощь.

ответ

0

Попробуйте эту функцию, чтобы получить ассоциативный массив вашего XML.

function objectsIntoArray($arrObjData, $arrSkipIndices = array()) 
{ 
    $arrData = array(); 

    // if input is object, convert into array 
    if (is_object($arrObjData)) { 
     $arrObjData = get_object_vars($arrObjData); 
    } 

    if (is_array($arrObjData)) { 
     foreach ($arrObjData as $index => $value) { 
      if (is_object($value) || is_array($value)) { 
       $value = objectsIntoArray($value, $arrSkipIndices); // recursive call 
      } 
      if (in_array($index, $arrSkipIndices)) { 
       continue; 
      } 
      $arrData[$index] = $value; 
     } 
    } 
    return $arrData; 
} 

Использование:

$xmlUrl = "nameit.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl); 
$xmlObj = simplexml_load_string($xmlStr); 
$arrXml = objectsIntoArray($xmlObj); 
print_r($arrXml); 
+0

Спасибо это помогло. Так что, если бы я хотел, например, добавить еще одного бармена в один из объектов бара, как мне получить доступ к определенному массиву внутри arrXml? Спасибо за вашу помощь! – thebiglebowski11

+0

Когда ваш полный Xml конвертируется в массив, вы можете получить доступ к каждому внутреннему массиву с помощью цикла foreach. Вы также должны видеть, что в массиве wheater есть отдельные значения или объекты std_class, и, соответственно, вам нужно зацикливаться. Если есть какие-либо проблемы с доступом к вашим данным из этого массива, вы также можете опубликовать образец массива в новом вопросе, чтобы получить соответствующий Результаты. – Astha