kunci dan nilai ditukar - Anda bisa memperbaikinya dengan array_flip()sebelum array_walk. array_walk_recursivemembutuhkan PHP 5. Anda bisa menggunakannya array_walk, tetapi Anda tidak akan mendapatkan 'stack' => 'overflow'xml saat itu.
Ini tidak akan berfungsi jika $ test_array memiliki 'more_another_array' seperti 'another_array', karena kunci 'another_array' tidak dikonversi. Karenanya Anda akan memiliki beberapa '<overflow> tumpukan </overflow>'.
understack
11
Tidak array_flipakan berfungsi karena tidak dapat membalik array (seperti di another_arraydalam array utama).
Lode
14
Di mana elemen xml "another_array"? Semuanya rata :(
FMaz008
2
Bekerja dengan baik ketika saya menambahkan array_flip sebelum array_walk_recursive. Terima kasih.
Mike Purcell
12
Menurunkan karena array_fliphanya berfungsi jika array tidak mengandung nilai yang identik.
Martijn
385
Berikut ini adalah kode php 5.2 yang akan mengonversi berbagai kedalaman ke dokumen xml:
Ini, IMO, adalah solusi yang jauh lebih baik daripada jawaban yang diterima. Namun, ini memiliki batasan bahwa dengan array yang dikunci secara numerik, ini menghasilkan XML yang salah bentuk. <0> <1> <2> bukan nama simpul yang valid.
KOGI
2
Namun, jika array yang dikunci secara numerik hanya berisi array lain yang tidak dikunci secara numerik, array tidak akan dikunci.
Bryan Petty
15
@ KOGI Saya telah mengubah jawaban Hanmant. Sekarang mendukung array bertingkat. pastebin.com/pYuXQWee
Mifas
1
Contoh ini secara eksplisit lolos dari karakter khusus dalam data teks elemen menggunakan htmlspecialchars, tetapi SimpleXMLElement :: addChild menerjemahkan karakter khusus xml ke entitas char mereka secara otomatis sehingga htmlspecialchars dapat ditinggalkan. Menariknya, ini tampaknya tidak menghasilkan data dua kali lipat.
mbaynton
3
@Alex, Edit # 5 Anda membuat contoh gagal. Itu menyisipkan <item $ x> sebelum setiap catatan <student> membuat output XML bukan apa yang dimaksudkan penulis. Mungkin memberikan contoh masalah yang Anda coba untuk memperbaiki dan kami dapat menemukan solusi lain untuk kedua kasus. Butuh waktu beberapa saat sebelum saya menyadari bahwa kode penulis telah dimodifikasi.
Nicholas Blasgen
124
Jawaban yang diberikan di sini hanya mengubah array menjadi XML dengan node, Anda tidak dapat mengatur atribut. Saya telah menulis fungsi php yang memungkinkan Anda untuk mengkonversi array ke php dan juga mengatur atribut untuk node tertentu di xml. Kelemahannya di sini adalah Anda harus membuat array dengan cara tertentu dengan sedikit konvensi (hanya jika Anda ingin menggunakan atribut)
Contoh berikut akan memungkinkan Anda untuk mengatur atribut dalam XML juga.
Saya terkejut bahwa tidak ada yang bereaksi pada yang ini. Kelas ini sangat berguna karena ia melakukan kebalikan dari apa yang akan dihasilkan oleh simpleXMLElement. Jadi itu memberi Anda kemungkinan menggunakan SimpleXMLElement dua arah.
FMaz008
4
Saya akan menandainya sebagai jawaban alih-alih saat ini. Jawaban saat ini tidak membangun array rekursif
Oleksandr IY
2
Kelas yang bagus. Saya mengubah baris 128 if(!is_array($arr)) {ke if(!is_array($arr) && $arr !== '') {sehingga tidak akan menambahkan sebuah simpul teks baru untuk string kosong dan karena itu membuat singkatan kosong Format tag yaitu 'tag'=>''adalah <tag/>bukan<tag></tag>
user1433150
Ini adalah jawaban terbaik sejauh ini. Juga ini memiliki struktur yang benar dari beberapa item dengan kunci yang sama: 1 adalah kunci nama simpul, kemudian berisi array dengan kunci numerik. (kebalikan dari jawaban Hanmant)
Saya menemukan semua jawaban untuk menggunakan terlalu banyak kode. Ini cara mudah untuk melakukannya:
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);}}}
Maka itu masalah sederhana mengirimkan array ke fungsi, yang menggunakan rekursi, sehingga akan menangani array multi-dimensi:
Saya paling suka solusi ini. Meskipun, itu akan menyenangkan untuk menambahkan tes pada tombol angka, seperti: if ( is_numeric( $key ) ) $key = "numeric_$key"; .
Wout
@ baik Tangkapan yang bagus. Ditambahkan. Saya melakukan pengecekan int bukan is_numeric karena is_numeric dapat memberikan beberapa, meskipun secara teknis diharapkan, hasil yang benar-benar akan membuat Anda marah.
Francis Lewis
Saya menggunakan fungsi ini, tetapi diubah $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><rootTag/>');untuk pengkodean UTF-8 yang valid.
Daantje
Aku seperti solusi ini paling juga, sederhana melakukannya :-) Satu komentar: Anda mungkin ingin mengubah $object->addChild($key, $value);untuk $object->addChild($key, htmlspecialchars($value));untuk mencegah gagal ketika $ nilai berisi karakter seperti "&" yang perlu XML-encoding.
ini gagal jika array Anda berisi array dalam dengan indeks numerik. <0> ... </0> bukan XML yang valid.
Adriano Varoli Piazza
@AdrianoVaroliPiazza tambahkan sesuatu seperti $k = (is_numeric($k)) ? 'item' : $k;di dalamforeach()
AlienWebguy
Jika salah satu kunci dalam array bernama "body", itu tidak berfungsi - lebih tepatnya, kunci tersebut diabaikan dan dilintasi. Mencoba mencari tahu alasannya.
Bambax
@Bambax Satu-satunya alasan yang dapat saya pikirkan adalah jika XML sedang diuraikan sebagai HTML di beberapa titik kemudian.
Jadi, bagaimanapun juga ... Saya mengambil kode onokazu (terima kasih!) Dan menambahkan kemampuan untuk mengulangi tag dalam XML, itu juga mendukung atribut, semoga seseorang merasa berguna!
Sangat membantu untuk mengomentari perubahan Anda untuk membuat kode lebih jelas; masih, tambahan yang bagus
StormeHawke
Ini bekerja untuk saya dengan WP All Export. Aku harus mengubah bagian is_numeric sedikit: if (is_numeric($k)) { $i = $k + 1; $child = $xml->addChild("_$i"); array_to_xml($v, $child); }
achiever
4
Saya menggunakan beberapa fungsi yang saya tulis beberapa waktu lalu untuk menghasilkan xml untuk bolak-balik dari PHP dan jQuery dll ... Baik menggunakan kerangka kerja tambahan hanya murni menghasilkan string yang kemudian dapat digunakan dengan SimpleXML (atau kerangka kerja lain ) ...
Jika bermanfaat bagi siapa pun, silakan gunakan :)
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
Sebagian besar jawaban di atas benar. Namun, saya datang dengan jawaban ini yang memecahkan masalah kompatibilitas array_walk_recursive dan juga masalah kunci numerik. Itu juga lulus semua tes yang saya buat:
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);}}
Saya juga telah menambahkan kelas tes untuk ini yang mungkin berguna bagi Anda:
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());}}
Ini memiliki efek yang tak terduga dalam membuat XML RPC-style dengan hal-hal seperti methodCall, methodName, skalar dan vektor, dll. Ini tidak benar-benar mengubah array menjadi XML dalam arti langsung.
Volomike
3
JIKA array asosiatif dan dikunci dengan benar, mungkin akan lebih mudah untuk mengubahnya menjadi xml terlebih dahulu. Sesuatu seperti:
dan kemudian untuk setiap bagian array Anda, gunakan sesuatu yang mirip dengan loop pembuatan teks saya dan alih-alih gunakan fungsi simplexml "addChild" untuk setiap node array.
Saya akan mencobanya nanti dan memperbarui posting ini dengan kedua versi.
Sedikit di mana saya sebutkan "<array> </array>" membuat saya menyadari bahwa versi string membutuhkan sesuatu yang serupa. Pada dasarnya array harus memiliki satu simpul di bagian paling luar. Biarkan saya tidur pada semuanya, saya akan memiliki sesuatu yang menangkap kesalahan awal segera.
Anthony
2
Hanya edit pada fungsi di atas, ketika kunci numerik, tambahkan awalan "key_"
// 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");}}}}
Anda dapat menggunakan fungsi berikut dalam kode Anda secara langsung,
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";}}}
Panggil fungsi dengan argumen pertama sebagai array Anda dan argumen kedua harus 1, ini akan ditingkatkan untuk indentasi sempurna, dan ketiga harus benar.
misalnya, jika variabel array yang akan dikonversi adalah $ array1 maka, panggilan akan, fungsi panggilan harus dienkapsulasi dengan <pre>tag.
artoxml ($ array1,1, true);
Silakan lihat sumber halaman setelah mengeksekusi file, karena simbol <dan> tidak akan ditampilkan dalam halaman html.
Anda dapat menggunakan xmlrpc_encode untuk membuat xml dari array jika xml verbose tidak menjadi masalah.
www.php.net/xmlrpc_encode
hati-hati xml yang dibuat berbeda jika Anda menggunakan kunci asosiatif dan / atau numerik
<?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);?>
Fungsi ini tidak didukung dan, pada kenyataannya, tidak disediakan di build saya PHP 5.2.16 atau PHP 5.3.5. (mengembalikan "Kesalahan PHP Fatal: Panggil ke fungsi yang tidak ditentukan xmlrpc_encode ()")
danorton
Anda harus menghapus tanda komentar pada baris berikut di php.ini: extension = php_xmlrpc.dll
w35l3y
@ w35l3y Saya memeriksa ini. Bahkan tidak mengandung ekstensi itu dan saya menggunakan v 5.3.6.
Jawaban saya, mengumpulkan jawaban orang lain. Ini harus memperbaiki kesalahan untuk mengkompensasi kunci numerik:
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);}}}
The array_to_xml()Fungsi menganggap bahwa array terdiri dari tombol angka pertama. Jika array Anda memiliki elemen awal, Anda akan menjatuhkan foreach()dan $elempernyataan dari array_to_xml()fungsi dan hanya meneruskannya $xml.
Saya akan mengomentari jawaban kedua yang paling banyak dipilih, karena itu tidak mempertahankan struktur dan menghasilkan xml buruk jika ada array batin yang diindeks secara numerik.
Saya mengembangkan versi saya sendiri berdasarkan itu, karena saya membutuhkan konverter sederhana antara json dan xml terlepas dari struktur data. Versi saya mempertahankan informasi kunci numerik dan struktur array asli. Itu menciptakan elemen untuk nilai yang diindeks secara numerik dengan membungkus nilai ke elemen yang diberi nama nilai dengan atribut-kunci yang berisi kunci numerik.
Jawaban:
yang singkat:
hasil dalam
kunci dan nilai ditukar - Anda bisa memperbaikinya dengan
array_flip()
sebelum array_walk.array_walk_recursive
membutuhkan PHP 5. Anda bisa menggunakannyaarray_walk
, tetapi Anda tidak akan mendapatkan'stack' => 'overflow'
xml saat itu.sumber
array_flip
akan berfungsi karena tidak dapat membalik array (seperti dianother_array
dalam array utama).array_flip
hanya berfungsi jika array tidak mengandung nilai yang identik.Berikut ini adalah kode php 5.2 yang akan mengonversi berbagai kedalaman ke dokumen xml:
XML yang dihasilkan akan seperti:
Cuplikan PHP
Dokumentasi tentang
SimpleXMLElement::asXML
digunakan dalam cuplikan inisumber
Jawaban yang diberikan di sini hanya mengubah array menjadi XML dengan node, Anda tidak dapat mengatur atribut. Saya telah menulis fungsi php yang memungkinkan Anda untuk mengkonversi array ke php dan juga mengatur atribut untuk node tertentu di xml. Kelemahannya di sini adalah Anda harus membuat array dengan cara tertentu dengan sedikit konvensi (hanya jika Anda ingin menggunakan atribut)
Contoh berikut akan memungkinkan Anda untuk mengatur atribut dalam XML juga.
Sumbernya dapat ditemukan di sini: https://github.com/digitickets/lalit/blob/master/src/Array2XML.php
sumber
if(!is_array($arr)) {
keif(!is_array($arr) && $arr !== '') {
sehingga tidak akan menambahkan sebuah simpul teks baru untuk string kosong dan karena itu membuat singkatan kosong Format tag yaitu'tag'=>''
adalah<tag/>
bukan<tag></tag>
Saya menemukan semua jawaban untuk menggunakan terlalu banyak kode. Ini cara mudah untuk melakukannya:
Maka itu masalah sederhana mengirimkan array ke fungsi, yang menggunakan rekursi, sehingga akan menangani array multi-dimensi:
Sekarang $ xml berisi objek XML yang indah berdasarkan pada array Anda persis bagaimana Anda menulisnya.
sumber
if ( is_numeric( $key ) ) $key = "numeric_$key";
.$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><rootTag/>');
untuk pengkodean UTF-8 yang valid.$object->addChild($key, $value);
untuk$object->addChild($key, htmlspecialchars($value));
untuk mencegah gagal ketika $ nilai berisi karakter seperti "&" yang perlu XML-encoding.sumber
$k = (is_numeric($k)) ? 'item' : $k;
di dalamforeach()
Dari PHP 5.4
sumber
Peningkatan lainnya:
Pemakaian:
sumber
Inilah entri saya, sederhana dan bersih ..
sumber
Jadi, bagaimanapun juga ... Saya mengambil kode onokazu (terima kasih!) Dan menambahkan kemampuan untuk mengulangi tag dalam XML, itu juga mendukung atribut, semoga seseorang merasa berguna!
sumber
if (is_numeric($k)) { $i = $k + 1; $child = $xml->addChild("_$i"); array_to_xml($v, $child); }
Saya menggunakan beberapa fungsi yang saya tulis beberapa waktu lalu untuk menghasilkan xml untuk bolak-balik dari PHP dan jQuery dll ... Baik menggunakan kerangka kerja tambahan hanya murni menghasilkan string yang kemudian dapat digunakan dengan SimpleXML (atau kerangka kerja lain ) ...
Jika bermanfaat bagi siapa pun, silakan gunakan :)
Cinta untuk semua :)
sumber
Saya ingin kode yang akan mengambil semua elemen di dalam array dan memperlakukannya sebagai atribut, dan semua array sebagai sub elemen.
Jadi untuk sesuatu seperti
Saya akan mendapatkan sesuatu seperti ini
Untuk mencapai ini, kode di bawah ini, tetapi sangat hati-hati, ini bersifat rekursif dan sebenarnya dapat menyebabkan stackoverflow :)
Anda mungkin ingin menambahkan cek untuk panjang array sehingga beberapa elemen bisa diatur di dalam bagian data dan bukan sebagai atribut.
sumber
Berdasarkan semua hal lain di sini, menangani atribut + atribut numerik melalui awalan dengan
@
, dan dapat menyuntikkan xml ke node yang ada:Kode
Pemakaian
Hasil
Bonus: Memformat XML
sumber
Inilah fungsi yang melakukan trik untuk saya:
Sebut saja dengan sesuatu seperti
sumber
Anda bisa menggunakan XMLParser yang telah saya kerjakan.
Akan menghasilkan:
sumber
Saya menemukan solusi ini mirip dengan masalah aslinya
sumber
Sebagian besar jawaban di atas benar. Namun, saya datang dengan jawaban ini yang memecahkan masalah kompatibilitas array_walk_recursive dan juga masalah kunci numerik. Itu juga lulus semua tes yang saya buat:
Saya juga telah menambahkan kelas tes untuk ini yang mungkin berguna bagi Anda:
sumber
solusi lain:
sumber
JIKA array asosiatif dan dikunci dengan benar, mungkin akan lebih mudah untuk mengubahnya menjadi xml terlebih dahulu. Sesuatu seperti:
Rute lainnya adalah membuat xml dasar Anda terlebih dahulu, seperti
dan kemudian untuk setiap bagian array Anda, gunakan sesuatu yang mirip dengan loop pembuatan teks saya dan alih-alih gunakan fungsi simplexml "addChild" untuk setiap node array.
Saya akan mencobanya nanti dan memperbarui posting ini dengan kedua versi.
sumber
Hanya edit pada fungsi di atas, ketika kunci numerik, tambahkan awalan "key_"
sumber
Anda dapat menggunakan fungsi berikut dalam kode Anda secara langsung,
Panggil fungsi dengan argumen pertama sebagai array Anda dan argumen kedua harus 1, ini akan ditingkatkan untuk indentasi sempurna, dan ketiga harus benar.
misalnya, jika variabel array yang akan dikonversi adalah $ array1 maka, panggilan akan, fungsi panggilan harus dienkapsulasi dengan
<pre>
tag.Silakan lihat sumber halaman setelah mengeksekusi file, karena simbol <dan> tidak akan ditampilkan dalam halaman html.
sumber
sumber
Fungsi ini mengembalikan misalnya daftar <obj> ...</obj> <obj> ... </obj> tag XML untuk indeks numerik.
Memasukkan:
Keluaran:
Ini harus memenuhi semua kebutuhan bersama. Mungkin Anda dapat mengubah baris ke-3 menjadi:
atau jika Anda bekerja dengan bentuk jamak yang diakhiri dengan s:
sumber
Dengan FluidXML Anda dapat membuat, mulai dari PHP Array , XML untuk SimpleXML dengan ... hanya dua baris kode.
Contoh array bisa berupa
https://github.com/servo-php/fluidxml
sumber
Anda dapat menggunakan xmlrpc_encode untuk membuat xml dari array jika xml verbose tidak menjadi masalah. www.php.net/xmlrpc_encode
hati-hati xml yang dibuat berbeda jika Anda menggunakan kunci asosiatif dan / atau numerik
sumber
sumber
Jawaban saya, mengumpulkan jawaban orang lain. Ini harus memperbaiki kesalahan untuk mengkompensasi kunci numerik:
The
array_to_xml()
Fungsi menganggap bahwa array terdiri dari tombol angka pertama. Jika array Anda memiliki elemen awal, Anda akan menjatuhkanforeach()
dan$elem
pernyataan dariarray_to_xml()
fungsi dan hanya meneruskannya$xml
.sumber
Saya akan mengomentari jawaban kedua yang paling banyak dipilih, karena itu tidak mempertahankan struktur dan menghasilkan xml buruk jika ada array batin yang diindeks secara numerik.
Saya mengembangkan versi saya sendiri berdasarkan itu, karena saya membutuhkan konverter sederhana antara json dan xml terlepas dari struktur data. Versi saya mempertahankan informasi kunci numerik dan struktur array asli. Itu menciptakan elemen untuk nilai yang diindeks secara numerik dengan membungkus nilai ke elemen yang diberi nama nilai dengan atribut-kunci yang berisi kunci numerik.
Sebagai contoh
array('test' => array(0 => 'some value', 1 => 'other'))
dikonversi ke
<test><value key="0">some value</value><value key="1">other</value></test>
Versi array_to_xml -fungsi saya (semoga membantu orang lain :)
sumber
Seluruh struktur XML didefinisikan dalam $ data Array:
sumber
Jika Anda bekerja di Magento dan Anda memiliki jenis array asosiatif
maka ini yang terbaik untuk mengubah array asosiatif ke format xml. Gunakan kode ini dalam file controller.
Saya harap ini membantu semua orang.
sumber
sumber