Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menukar xml ke array dalam php
Apabila membangunkan aplikasi web, selalunya perlu mendapatkan data XML daripada sumber luaran dan memprosesnya. Banyak kali, kita perlu menukar data XML ini kepada tatasusunan PHP untuk memudahkan menambah, mengubah suai, memadam atau mengakses data.
Dalam PHP, kami boleh menggunakan perpustakaan fungsi SimpleXML untuk menghuraikan dan memanipulasi fail XML, dan kami juga boleh menggunakan pustaka fungsi DOM untuk menyelesaikan tugas yang sama. Walau bagaimanapun, artikel ini akan memberi tumpuan kepada cara menggunakan perpustakaan SimpleXML untuk menukar fail XML kepada tatasusunan PHP.
Sebelum menukar fail XML kepada tatasusunan PHP, kami perlu memuatkan fail XML terlebih dahulu. Ini boleh dilakukan melalui pembina kelas SimpleXMLElement seperti berikut:
$xml = new SimpleXMLElement('filename.xml', null, true);
Di sini, parameter pertama ialah laluan ke fail XML, parameter kedua menentukan pilihan fail XML dan yang ketiga parameter Menunjukkan sama ada untuk mendayakan sokongan ruang nama.
Setelah kami memuatkan fail XML, kami boleh menukarnya kepada tatasusunan PHP menggunakan kaedah yang disediakan oleh perpustakaan SimpleXML. Pertama, kita perlu mencipta tatasusunan kosong untuk menyimpan data XML. Kemudian, kita boleh menggunakan kaedah children() kelas SimpleXMLElement untuk mendapatkan semua nod anak nod semasa, seperti yang ditunjukkan di bawah:
$array = array(); foreach ($xml->children() as $element) { $name = $element->getName(); $attributes = $element->attributes(); if (!$attributes) { if (!isset($array[$name])) { $array[$name] = (string) $element; } else { if (!is_array($array[$name])) { $array[$name] = array($array[$name]); } $array[$name][] = (string) $element; } } else { $array[$name][] = array(); foreach ($attributes as $attrName => $attrValue) { $array[$name][count($array[$name])-1]['_'.$attrName] = (string) $attrValue; } if ($element->children()) { $array[$name][count($array[$name])-1] = array_merge($array[$name][count($array[$name])-1],$this->xml2array($element)); } else { $array[$name][count($array[$name])-1]['value'] = (string) $element; } } }
Di sini, kami menggunakan gelung foreach untuk melintasi semua kanak-kanak nod dan dapatkan nama dan atribut. Untuk nod tanpa nod anak, kami akan menyimpan kandungannya sebagai nilai tatasusunan, dan namanya ialah nama nod untuk nod dengan nod anak, fungsi xml2array() dipanggil secara rekursif untuk menukar nod anaknya kepada tatasusunan, dan kemudian Tatasusunan ini digabungkan ke dalam tatasusunan nod semasa.
Selepas menukar data XML kepada tatasusunan PHP, tatasusunan output mungkin memerlukan pemprosesan selanjutnya untuk memenuhi keperluan kita dengan lebih baik. Sebagai contoh, kita mungkin perlu menyimpan semua sifat dalam tatasusunan berasingan atau menukar struktur tatasusunan agar lebih sepadan dengan keperluan aplikasi. Berikut ialah beberapa operasi mengemas biasa yang mungkin anda ingin lakukan:
function xml2array($xml) { $array = array(); foreach ($xml->children() as $element) { $name = $element->getName(); $attributes = $element->attributes(); if (!$attributes) { if (!isset($array[$name])) { $array[$name] = (string) $element; } else { if (!is_array($array[$name])) { $array[$name] = array($array[$name]); } $array[$name][] = (string) $element; } } else { $array[$name][] = array('_attributes' => array()); foreach ($attributes as $attrName => $attrValue) { $array[$name][count($array[$name])-1]['_attributes'][$attrName] = (string) $attrValue; } if ($element->children()) { $array[$name][count($array[$name])-1] = array_merge($array[$name][count($array[$name])-1],$this->xml2array($element)); } else { $array[$name][count($array[$name])-1]['value'] = (string) $element; } } } return $array; }
function xml2array($xml) { $array = array(); foreach ($xml->children() as $element) { $name = $element->getName(); $attributes = $element->attributes(); if (!$attributes) { if (!isset($array[$name])) { $array[$name] = (string) $element; } else { if (!is_array($array[$name])) { $array[$name] = array($array[$name]); } $array[$name][] = (string) $element; } } else { $node = array( '_name' => $name, '_value' => (count($element->children()) == 0) ? (string) $element : null, '_attributes' => array(), '_children' => array() ); foreach ($attributes as $attrName => $attrValue) { $node['_attributes'][$attrName] = (string) $attrValue; } foreach ($element->children() as $childElement) { $childNode = $this->xml2array($childElement); $childName = $childElement->getName(); if (count($childNode) == 1) { $node['_children'][$childName] = reset($childNode); } else { $node['_children'][$childName][] = $childNode; } } if (!isset($array[$name])) { $array[$name] = $node; } else { if (!is_array($array[$name])) { $array[$name] = array($array[$name]); } $array[$name][] = $node; } } } return $array; }
Di sini, apabila bekerja dengan nod, kami mencipta tatasusunan baharu yang mengandungi empat elemen berikut: nama, nilai, atribut dan nod anak. Ini membolehkan tatasusunan output dipetakan dengan mudah ke dalam jadual pangkalan data, atribut kelas atau struktur data lain.
Ringkasan
Menukar fail XML kepada tatasusunan PHP dalam PHP boleh dicapai melalui perpustakaan fungsi SimpleXML. Anda boleh menggunakan kaedah children() kelas SimpleXMLElement untuk melintasi pepohon XML dan menyimpan data menggunakan tatasusunan PHP. Setelah ditukar kepada tatasusunan PHP, data boleh diproses selanjutnya untuk akses dan manipulasi yang mudah.
Di atas ialah perkara yang diperkenalkan oleh artikel ini, saya harap ia dapat membantu anda dalam menggunakan PHP untuk memproses fail XML dalam pembangunan web.
Atas ialah kandungan terperinci Bagaimana untuk menukar xml ke array dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!