klucze i wartości są zamieniane - można to naprawić array_flip()przed tablicą. array_walk_recursivewymaga PHP 5. możesz array_walkzamiast tego użyć , ale wtedy nie dostaniesz się 'stack' => 'overflow'do xml.
To nie zadziała, jeśli $ test_array ma „more_another_array” jak „another_array”, ponieważ klucz „another_array” nie jest konwertowany. Dlatego będziesz mieć wiele „<overflow> stos </overflow>”.
understack
11
array_flipNie działa, ponieważ może nie klapki tablicami (podobnie jak another_arrayw głównej tablicy).
Lode
14
Gdzie jest element xml „another_array”? Wszystko jest spłaszczone :(
FMaz008
2
Działa świetnie, gdy dodałem array_flip przed array_walk_recursive. dzięki.
Mike Purcell
12
Głosowanie w dół, ponieważ array_flipdziała tylko wtedy, gdy tablica nie zawiera identycznych wartości.
Martijn
386
Oto kod php 5.2, który przekonwertuje tablicę o dowolnej głębokości do dokumentu XML:
To, IMO, jest znacznie lepszym rozwiązaniem niż przyjęta odpowiedź. Ma to jednak takie ograniczenie, że przy tablicach z kluczami numerycznymi generuje zniekształcony XML. <0> <1> <2> nie są prawidłowymi nazwami węzłów.
KOGI
2
Dzieje się tak jednak, jeśli twoja tablica z kluczami numerycznymi zawiera tylko inną tablicę, która nie jest numerowana, nie będzie.
Bryan Petty
15
@KOGI Zmodyfikowałem odpowiedź Hanmanta. Teraz obsługuje wielopoziomowe tablice. pastebin.com/pYuXQWee
Mifas
1
W tym przykładzie jawnie ucieka się do znaków specjalnych w danych tekstowych elementu za pomocą htmlspecialchars, ale SimpleXMLElement :: addChild tłumaczy znaki specjalne xml na ich jednostki char automatycznie, więc htmlspecialchars można pominąć. Co ciekawe, wydaje się, że nie powoduje to podwójnie uciekających danych.
mbaynton,
3
@Alex, twój Edit # 5 powoduje, że przykład się nie powiedzie. Wstawia <element $ x> przed każdym rekordem <student>, dzięki czemu wyjście XML nie jest zgodne z zamierzeniami autora. Może podaj przykład problemu, który próbujesz rozwiązać, a my możemy znaleźć inne rozwiązanie dla obu przypadków. Zajęło mi to chwilę, zanim zdałem sobie sprawę, że kod autora został zmodyfikowany.
Nicholas Blasgen
124
Podane tutaj odpowiedzi konwertują tylko tablicę na XML z węzłami, nie można ustawić atrybutów. Napisałem funkcję php, która pozwala przekonwertować tablicę na php, a także ustawić atrybuty dla poszczególnych węzłów w xml. Minusem jest to, że musisz zbudować tablicę w określony sposób z kilkoma konwencjami (tylko jeśli chcesz użyć atrybutów)
Poniższy przykład pozwoli ci również ustawić atrybuty w XML.
Dziwi mnie, że nikt na to nie zareagował. Ta klasa jest naprawdę przydatna, ponieważ robi coś przeciwnego do tego, co wygeneruje simpleXMLElement. Daje to możliwość korzystania z SimpleXMLElement na dwa sposoby.
FMaz008,
4
Oznaczę to jako odpowiedź zamiast aktualnej. Obecna odpowiedź nie buduje tablic rekurencyjnych
Oleksandr IY
2
Niezła klasa. Zmieniłem wiersz 128 if(!is_array($arr)) {na, if(!is_array($arr) && $arr !== '') {aby nie dołączał nowego węzła tekstowego dla pustych ciągów, a zatem zachowuje skrócony format pustych znaczników, tzn. 'tag'=>''Jest <tag/>zamiast<tag></tag>
użytkownik1433150
To najlepsza jak dotąd odpowiedź. Ma to również prawidłową strukturę wielu elementów z tym samym kluczem: 1. to klucz nazwy węzła, a następnie zawiera tablicę z kluczami numerycznymi. (przeciwieństwo odpowiedzi Hanmanta)
Znalazłem wszystkie odpowiedzi, aby użyć zbyt dużej ilości kodu. Oto prosty sposób:
function to_xml(SimpleXMLElement $object, array $data){foreach($data as $key => $value){if(is_array($value)){
$new_object = $object->addChild($key);
to_xml($new_object, $value);}else{// if the key is an integer, it needs text with it to actually work.if($key ==(int) $key){
$key ="key_$key";}
$object->addChild($key, $value);}}}
Następnie wystarczy wysłać tablicę do funkcji, która korzysta z rekurencji, więc będzie obsługiwać tablicę wielowymiarową:
Najbardziej podoba mi się to rozwiązanie. Chociaż byłoby miło, aby dodać test na klawiszach numerycznych, takich jak: if ( is_numeric( $key ) ) $key = "numeric_$key"; .
wout
@wout Good catch. Dodany. Zrobiłem int cast sprawdzanie zamiast is_numeric, ponieważ is_numeric może dać pewne, choć technicznie oczekiwane, wyniki, które naprawdę by cię zrzuciły.
Francis Lewis,
Korzystam z tej funkcji, ale zmieniłem $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><rootTag/>');na prawidłowe kodowanie UTF-8.
Daantje
I jak to rozwiązanie najbardziej jak dobrze, proste prawda :-) Jedna uwaga: Możesz chcieć zmienić $object->addChild($key, $value);się $object->addChild($key, htmlspecialchars($value));, aby zapobiec jego braku, gdy wartość $ value zawiera znaki takie jak „i”, że potrzebują XML kodowania.
W każdym razie ... Wziąłem kod onokazu (dzięki!) I dodałem możliwość powtarzania znaczników w XML, obsługuje również atrybuty, mam nadzieję, że ktoś uzna to za przydatne!
Pomocne może być skomentowanie wprowadzonych zmian, aby kod był bardziej przejrzysty; wciąż miły dodatek
StormeHawke,
To działało dla mnie z WP All Export. Musiałem nieco zmienić część is_numeric: if (is_numeric($k)) { $i = $k + 1; $child = $xml->addChild("_$i"); array_to_xml($v, $child); }
osiągając
4
Korzystam z kilku funkcji, które napisałem jakiś czas temu, aby wygenerować xml do przekazywania tam iz powrotem z PHP i jQuery itp. Ani też nie używam żadnych dodatkowych frameworków, a jedynie generuje ciąg znaków, który może być następnie użyty w SimpleXML (lub innym frameworku ) ...
Jeśli jest to przydatne dla kogokolwiek, użyj go :)
function get_formatted_xml(SimpleXMLElement $xml, $domver =null, $preserveWhitespace =true, $formatOutput =true){// http://stackoverflow.com/questions/1191167/format-output-of-simplexml-asxml// create new wrapper, so we can get formatting options
$dom =newDOMDocument($domver);
$dom->preserveWhiteSpace = $preserveWhitespace;
$dom->formatOutput = $formatOutput;// now import the xml (converted to dom format)/*
$ix = dom_import_simplexml($xml);
$ix = $dom->importNode($ix, true);
$dom->appendChild($ix);
*/
$dom->loadXML($xml->asXML());// printreturn $dom->saveXML();}//-- fn get_formatted_xml
Większość powyższych odpowiedzi jest poprawna. Jednak wymyśliłem tę odpowiedź, która rozwiązuje problem kompatybilności array_walk_recursive, a także problem klawiszy numerycznych. Przeszedł także wszystkie testy, które wykonałem:
function arrayToXML(Array $array,SimpleXMLElement&$xml){foreach($array as $key => $value){// None arrayif(!is_array($value)){(is_numeric($key))? $xml->addChild("item$key", $value): $xml->addChild($key, $value);continue;}// Array
$xmlChild =(is_numeric($key))? $xml->addChild("item$key"): $xml->addChild($key);
arrayToXML($value, $xmlChild);}}
Dodałem również klasę testową do tego, co może okazać się przydatne:
classArrayToXmlTestextendsPHPUnit_Framework_TestCase{publicfunction setUp(){}publicfunction tearDown(){}publicfunction testFuncExists(){
$this->assertTrue(function_exists('arrayToXML'));}publicfunction testFuncReturnsXml(){
$array = array('name'=>'ardi','last_name'=>'eshghi','age'=>31,'tel'=>'0785323435');
$xmlEl =newSimpleXMLElement('<root/>');
arrayToXml($array, $xmlEl);
$this->assertTrue($xmlEl instanceOf SimpleXMLElement);}publicfunction testAssocArrayToXml(){
$array = array('name'=>'ardi','last_name'=>'eshghi','age'=>31,'tel'=>'0785323435');
$expectedXmlEl =newSimpleXMLElement('<root/>');
$expectedXmlEl->addChild('name', $array['name']);
$expectedXmlEl->addChild('last_name', $array['last_name']);
$expectedXmlEl->addChild('age', $array['age']);
$expectedXmlEl->addChild('tel', $array['tel']);
$actualXmlEl =newSimpleXMLElement('<root/>');
arrayToXml($array, $actualXmlEl);
$this->assertEquals($expectedXmlEl->asXML(), $actualXmlEl->asXML());}publicfunction testNoneAssocArrayToXml(){
$array = array('ardi','eshghi',31,'0785323435');// Expected xml value
$expectedXmlEl =newSimpleXMLElement('<root/>');foreach($array as $key => $value)
$expectedXmlEl->addChild("item$key", $value);// What the function produces
$actualXmlEl =newSimpleXMLElement('<root/>');
arrayToXml($array, $actualXmlEl);
$this->assertEquals($expectedXmlEl->asXML(), $actualXmlEl->asXML());}publicfunction testNestedMixArrayToXml(){
$testArray = array("goal","nice","funny"=> array('name'=>'ardi','tel'=>'07415517499',"vary","fields"=> array('small','email'=>'[email protected]'),'good old days'),"notes"=>"come on lads lets enjoy this","cast"=> array('Tom Cruise','Thomas Muller'=> array('age'=>24)));// Expected xml value
$expectedXmlEl =newSimpleXMLElement('<root/>');
$expectedXmlEl->addChild('item0', $testArray[0]);
$expectedXmlEl->addChild('item1', $testArray[1]);
$childEl = $expectedXmlEl->addChild('funny');
$childEl->addChild("name", $testArray['funny']['name']);
$childEl->addChild("tel", $testArray['funny']['tel']);
$childEl->addChild("item0","vary");
$childChildEl = $childEl->addChild("fields");
$childChildEl->addChild('item0','small');
$childChildEl->addChild('email', $testArray['funny']['fields']['email']);
$childEl->addChild("item1",'good old days');
$expectedXmlEl->addChild('notes', $testArray['notes']);
$childEl2 = $expectedXmlEl->addChild('cast');
$childEl2->addChild('item0','Tom Cruise');
$childChildEl2 = $childEl2->addChild('Thomas Muller');
$childChildEl2->addChild('age', $testArray['cast']['Thomas Muller']['age']);// What the function produces
$actualXmlEl =newSimpleXMLElement('<root/>');
arrayToXml($testArray, $actualXmlEl);
$this->assertEquals($expectedXmlEl->asXML(), $actualXmlEl->asXML());}}
Ma to nieoczekiwany efekt w postaci tworzenia kodu XML w stylu RPC za pomocą metod takich jak methodCall, methodName, skalary i wektory itp. Nie jest to tak naprawdę konwersja tablicy na XML w prostym sensie.
Volomike
3
JEŻELI tablica jest asocjacyjna i poprawnie wpisana, prawdopodobnie łatwiej byłoby ją najpierw przekształcić w xml. Coś jak:
a następnie dla każdej części tablicy użyj czegoś podobnego do mojej pętli tworzenia tekstu i zamiast tego użyj funkcji simplexml „addChild” dla każdego węzła tablicy.
Wypróbuję to później i zaktualizuję ten post w obu wersjach.
Ten fragment, w którym wspomniałem „<array> </array>”, uświadomił mi, że wersja łańcuchowa potrzebuje czegoś podobnego. Zasadniczo tablica musi mieć jeden węzeł na samym zewnątrz. Pozwól mi spać nad wszystkim, od razu będę miał coś, co wyłapie ten początkowy błąd.
Anthony
2
Po prostu edytuj powyższą funkcję, gdy klucz jest numeryczny, dodaj przedrostek „klucz_”
// initializing or creating array
$student_info = array(your array data);// creating object of SimpleXMLElement
$xml_student_info =newSimpleXMLElement("<?xml version=\"1.0\"?><student_info></student_info>");// function call to convert array to xml
array_to_xml($student,$xml_student_info);//saving generated xml file
$xml_student_info->asXML('file path and name');function array_to_xml($student_info,&$xml_student_info){foreach($student_info as $key => $value){if(is_array($value)){if(!is_numeric($key)){
$subnode = $xml_student_info->addChild("$key");
array_to_xml($value, $subnode);}else{
$subnode = $xml_student_info->addChild("key_$key");
array_to_xml($value, $subnode);}}else{if(!is_numeric($key)){
$xml_student_info->addChild("$key","$value");}else{
$xml_student_info->addChild("key_$key","$value");}}}}
Możesz użyć poniższej funkcji bezpośrednio w swoim kodzie,
function artoxml($arr, $i=1,$flag=false){
$sp ="";for($j=0;$j<=$i;$j++){
$sp.=" ";}foreach($arr as $key=>$val){
echo "$sp<".$key.">";if($i==1) echo "\n";if(is_array($val)){if(!$flag){echo"\n";}
artoxml($val,$i+5);
echo "$sp</".$key.">\n";}else{
echo "$val"."</".$key.">\n";}}}
Wywołaj funkcję z pierwszym argumentem jako tablicą, a drugim argumentem musi być 1, to zostanie zwiększone dla idealnego wcięcia, a trzeci musi być prawdziwy.
na przykład, jeśli zmienną tablicową do konwersji jest $ tablica1, wówczas wywołaniem byłoby, funkcja wywołująca powinna być otoczona <pre>tagiem.
artoxml ($ tablica 1,1, prawda);
Sprawdź źródło strony po uruchomieniu pliku, ponieważ symbole <i> nie będą wyświetlane na stronie HTML.
Możesz użyć xmlrpc_encode, aby utworzyć xml z tablicy, jeśli pełny xml nie stanowi problemu.
www.php.net/xmlrpc_encode
bądź ostrożny, że utworzony plik XML różni się w przypadku używania kluczy asocjacyjnych i / lub numerycznych
<?php
// /params/param/value/struct/member// there is a tag "member" for each element// "member" contains a tag "name". its value is the associative key
$xml1 = xmlrpc_encode(array('a'=>'b','c'=>'d'));
$simplexml1 = simplexml_load_string($xml1);
print_r($xml1);
print_r($simplexml1);// /params/param/value/array/data// there is a tag "data" for each element// "data" doesn't contain the tag "name"
$xml2 = xmlrpc_encode(array('a','b'));
$simplexml2 = simplexml_load_string($xml2);
print_r($xml2);
print_r($simplexml2);?>
Ta funkcja nie jest obsługiwana i w rzeczywistości nie jest dostępna w moich kompilacjach PHP 5.2.16 lub PHP 5.3.5. (zwraca „Błąd krytyczny PHP: Wywołanie niezdefiniowanej funkcji xmlrpc_encode ()”)
danorton
musisz odkomentować następujący wiersz w php.ini: extension = php_xmlrpc.dll
w35l3y
@ w35l3y Sprawdziłem mój ini. Nie zawiera nawet tego rozszerzenia i używam wersji 5.3.6.
Moja odpowiedź, łącząc odpowiedzi innych. To powinno skorygować brak kompensacji klawiszy numerycznych:
function array_to_xml($array, $root, $element){
$xml =newSimpleXMLElement("<{$root}/>");foreach($array as $value){
$elem = $xml->addChild($element);
xml_recurse_child($elem, $value);}return $xml;}function xml_recurse_child(&$node, $child){foreach($child as $key=>$value){if(is_array($value)){foreach($value as $k => $v){if(is_numeric($k)){
xml_recurse_child($node, array($key => $v));}else{
$subnode = $node->addChild($key);
xml_recurse_child($subnode, $value);}}}else{
$node->addChild($key, $value);}}}
array_to_xml()Funkcji zakłada, że matryca składa się z klawiszy numerycznych pierwszej. Jeśli tablica zawiera element początkowy, upuszczasz instrukcje foreach()i $elemz array_to_xml()funkcji i po prostu przekazujesz $xml.
Skomentowałbym drugą najczęściej głosowaną odpowiedź, ponieważ nie zachowuje ona struktury i generuje zły xml, jeśli istnieją wewnętrznie indeksowane tablice liczbowe.
Na tej podstawie opracowałem własną wersję, ponieważ potrzebowałem prostego konwertera między json i xml, niezależnie od struktury danych. Moja wersja zachowuje kluczowe informacje liczbowe i strukturę oryginalnej tablicy. Tworzy elementy dla wartości indeksowanych numerycznie poprzez zawijanie wartości do elementów o nazwach wartości z atrybutem klucz zawierającym klucz numeryczny.
Odpowiedzi:
krótki:
prowadzi do
klucze i wartości są zamieniane - można to naprawić
array_flip()
przed tablicą.array_walk_recursive
wymaga PHP 5. możeszarray_walk
zamiast tego użyć , ale wtedy nie dostaniesz się'stack' => 'overflow'
do xml.źródło
array_flip
Nie działa, ponieważ może nie klapki tablicami (podobnie jakanother_array
w głównej tablicy).array_flip
działa tylko wtedy, gdy tablica nie zawiera identycznych wartości.Oto kod php 5.2, który przekonwertuje tablicę o dowolnej głębokości do dokumentu XML:
Wygenerowany XML wyglądałby następująco:
Fragment kodu PHP
Dokumentacja
SimpleXMLElement::asXML
użyta w tym fragmencieźródło
Podane tutaj odpowiedzi konwertują tylko tablicę na XML z węzłami, nie można ustawić atrybutów. Napisałem funkcję php, która pozwala przekonwertować tablicę na php, a także ustawić atrybuty dla poszczególnych węzłów w xml. Minusem jest to, że musisz zbudować tablicę w określony sposób z kilkoma konwencjami (tylko jeśli chcesz użyć atrybutów)
Poniższy przykład pozwoli ci również ustawić atrybuty w XML.
Źródło można znaleźć tutaj: https://github.com/digitickets/lalit/blob/master/src/Array2XML.php
źródło
if(!is_array($arr)) {
na,if(!is_array($arr) && $arr !== '') {
aby nie dołączał nowego węzła tekstowego dla pustych ciągów, a zatem zachowuje skrócony format pustych znaczników, tzn.'tag'=>''
Jest<tag/>
zamiast<tag></tag>
Znalazłem wszystkie odpowiedzi, aby użyć zbyt dużej ilości kodu. Oto prosty sposób:
Następnie wystarczy wysłać tablicę do funkcji, która korzysta z rekurencji, więc będzie obsługiwać tablicę wielowymiarową:
Teraz $ xml zawiera piękny obiekt XML oparty na tablicy dokładnie tak, jak go napisałeś.
źródło
if ( is_numeric( $key ) ) $key = "numeric_$key";
.$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><rootTag/>');
na prawidłowe kodowanie UTF-8.$object->addChild($key, $value);
się$object->addChild($key, htmlspecialchars($value));
, aby zapobiec jego braku, gdy wartość $ value zawiera znaki takie jak „i”, że potrzebują XML kodowania.źródło
$k = (is_numeric($k)) ? 'item' : $k;
w styluforeach()
Z PHP 5.4
źródło
Kolejna poprawa:
Stosowanie:
źródło
Oto mój wpis, prosty i czysty.
źródło
W każdym razie ... Wziąłem kod onokazu (dzięki!) I dodałem możliwość powtarzania znaczników w XML, obsługuje również atrybuty, mam nadzieję, że ktoś uzna to za przydatne!
źródło
if (is_numeric($k)) { $i = $k + 1; $child = $xml->addChild("_$i"); array_to_xml($v, $child); }
Korzystam z kilku funkcji, które napisałem jakiś czas temu, aby wygenerować xml do przekazywania tam iz powrotem z PHP i jQuery itp. Ani też nie używam żadnych dodatkowych frameworków, a jedynie generuje ciąg znaków, który może być następnie użyty w SimpleXML (lub innym frameworku ) ...
Jeśli jest to przydatne dla kogokolwiek, użyj go :)
Kocham wszystkich :)
źródło
Chciałem kodu, który weźmie wszystkie elementy wewnątrz tablicy i potraktuje je jako atrybuty, a wszystkie tablice jako podelementy.
Więc na coś takiego
Dostałbym coś takiego
Aby to osiągnąć, kod znajduje się poniżej, ale należy zachować ostrożność, ponieważ jest rekurencyjny i może spowodować przepełnienie stosu :)
Możesz dodać sprawdzanie długości tablicy, aby jakiś element został ustawiony wewnątrz części danych, a nie jako atrybut.
źródło
W oparciu o wszystko inne tutaj obsługuje indeksy liczbowe + atrybuty poprzez prefiks
@
i może wstrzykiwać xml do istniejących węzłów:Kod
Stosowanie
Wynik
Bonus: Formatowanie XML
źródło
Oto funkcja, która załatwiła sprawę:
Po prostu nazwij to czymś takim
źródło
Możesz użyć XMLParser , nad którym pracowałem.
Spowodowałoby to:
źródło
Znalazłem to rozwiązanie podobne do pierwotnego problemu
źródło
Większość powyższych odpowiedzi jest poprawna. Jednak wymyśliłem tę odpowiedź, która rozwiązuje problem kompatybilności array_walk_recursive, a także problem klawiszy numerycznych. Przeszedł także wszystkie testy, które wykonałem:
Dodałem również klasę testową do tego, co może okazać się przydatne:
źródło
inne rozwiązanie:
źródło
JEŻELI tablica jest asocjacyjna i poprawnie wpisana, prawdopodobnie łatwiej byłoby ją najpierw przekształcić w xml. Coś jak:
Inną drogą byłoby najpierw utworzenie podstawowego xml, na przykład
a następnie dla każdej części tablicy użyj czegoś podobnego do mojej pętli tworzenia tekstu i zamiast tego użyj funkcji simplexml „addChild” dla każdego węzła tablicy.
Wypróbuję to później i zaktualizuję ten post w obu wersjach.
źródło
Po prostu edytuj powyższą funkcję, gdy klucz jest numeryczny, dodaj przedrostek „klucz_”
źródło
Możesz użyć poniższej funkcji bezpośrednio w swoim kodzie,
Wywołaj funkcję z pierwszym argumentem jako tablicą, a drugim argumentem musi być 1, to zostanie zwiększone dla idealnego wcięcia, a trzeci musi być prawdziwy.
na przykład, jeśli zmienną tablicową do konwersji jest $ tablica1, wówczas wywołaniem byłoby, funkcja wywołująca powinna być otoczona
<pre>
tagiem.Sprawdź źródło strony po uruchomieniu pliku, ponieważ symbole <i> nie będą wyświetlane na stronie HTML.
źródło
źródło
Ta funkcja zwraca na przykład listę znaczników XML <obj>...</obj> <obj> ... </obj> dla indeksów numerycznych.
Wejście:
Wynik:
To powinno zaspokoić wszystkie typowe potrzeby. Może możesz zmienić trzecią linię na:
lub jeśli pracujesz z liczbą mnogą kończącą się na s:
źródło
Dzięki FluidXML możesz generować, począwszy od tablicy PHP , XML dla SimpleXML z ... tylko dwoma liniami kodu.
Przykładową tablicą może być
https://github.com/servo-php/fluidxml
źródło
Możesz użyć xmlrpc_encode, aby utworzyć xml z tablicy, jeśli pełny xml nie stanowi problemu. www.php.net/xmlrpc_encode
bądź ostrożny, że utworzony plik XML różni się w przypadku używania kluczy asocjacyjnych i / lub numerycznych
źródło
źródło
Moja odpowiedź, łącząc odpowiedzi innych. To powinno skorygować brak kompensacji klawiszy numerycznych:
array_to_xml()
Funkcji zakłada, że matryca składa się z klawiszy numerycznych pierwszej. Jeśli tablica zawiera element początkowy, upuszczasz instrukcjeforeach()
i$elem
zarray_to_xml()
funkcji i po prostu przekazujesz$xml
.źródło
Skomentowałbym drugą najczęściej głosowaną odpowiedź, ponieważ nie zachowuje ona struktury i generuje zły xml, jeśli istnieją wewnętrznie indeksowane tablice liczbowe.
Na tej podstawie opracowałem własną wersję, ponieważ potrzebowałem prostego konwertera między json i xml, niezależnie od struktury danych. Moja wersja zachowuje kluczowe informacje liczbowe i strukturę oryginalnej tablicy. Tworzy elementy dla wartości indeksowanych numerycznie poprzez zawijanie wartości do elementów o nazwach wartości z atrybutem klucz zawierającym klucz numeryczny.
Na przykład
array('test' => array(0 => 'some value', 1 => 'other'))
konwertuje na
<test><value key="0">some value</value><value key="1">other</value></test>
Moja wersja array_to_xml -funkcji (mam nadzieję, że komuś to pomoże :)
źródło
Cała struktura XML jest zdefiniowana w $ data Array:
źródło
Jeśli pracujesz w Magento i masz tego typu tablicę asocjacyjną
najlepiej jest przekonwertować tablicę asocjacyjną na format xml. Użyj tego kodu w pliku kontrolera.
Mam nadzieję, że to pomoże wszystkim.
źródło
źródło