如何使用php數(shù)組轉(zhuǎn)xml?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
伊美ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
php數(shù)組轉(zhuǎn)xml的方法:1、不使用回調(diào)函數(shù),代碼為【function outXmlFile($file, $xml_str)】;2、回調(diào)方法,生成不規(guī)則的xml,代碼為【$this->arrTo_Xml($value, $key)】。
php數(shù)組轉(zhuǎn)xml的方法:
方法一:原生的寫法
"; foreach ($arr as $key => $val) { if (is_array($val)) { $xml .= "<" . $key . ">" . arrayToXml($val) . "" . $key . ">"; } else { $xml .= "<" . $key . ">" . $val . "" . $key . ">"; } } $xml .= ""; return $xml; } $arr = array(); $arr["url"] = array( 1 => array( "loc" => "http://www.php.com/refessories/ind_10-gen_3/", "lastmod" => "2018/10/09" ), 2 => array( "loc" => "http://www.php.com/refeessories/ind_12-gen_5/", "lastmod" => "2018/10/09" ), 3 => array( "loc" => "http://www.php.com/refeessories/ind_15-gen_5/", "lastmod" => "2018/10/09" ), ); $simple_arrtoxml = arrayToXml($arr); var_dump($simple_arrtoxml); exit;
方法二:寫死的方法,沒有使用回調(diào)函數(shù)
/** * 把特定格式的數(shù)組轉(zhuǎn)化成XML * * @param $arr array 數(shù)組格式如下 * @param string $rootNodeName 最外層節(jié)點(diǎn)(根節(jié)點(diǎn)) * @return string */ function arrToXml($arr, $rootNodeName = 'index') { $Dom = new DOMDocument('1.0', 'utf-8'); // 根節(jié)點(diǎn) $root_node = $Dom->createElement($rootNodeName); $Dom->appendChild($root_node); //第一個節(jié)點(diǎn) $firstNodeName = key($arr); //循環(huán)節(jié)點(diǎn) foreach ($arr[$firstNodeName] as $value) { $firstNode = $Dom->createElement($firstNodeName); $root_node->appendChild($firstNode); $locNode = $Dom->createElement("loc", $value["loc"]); $firstNode->appendChild($locNode); if ($rootNodeName == 'sitemapindex') { $lastmodNode = $Dom->createElement('lastmod', $value["lastmod"]); } else { $lastmodNode = $Dom->createElement('lastmod'); $cdata = $Dom->createCDATASection($value["lastmod"]);// 生成日期特殊形式: $lastmodNode->appendChild($cdata); } $firstNode->appendChild($lastmodNode); } $Dom->formatOutput = true;//將特殊形式輸出出來 $result = $Dom->saveXML(); return $result; } /** * 輸出xml數(shù)據(jù)到xml文件中 * * @param $file string 文件名 * @param $xml_str * @return bool|int */ function outXmlFile($file, $xml_str) { echo "生成 ", $file, " 成功!", PHP_EOL; return file_put_contents($file, $xml_str); } /******************** 寫死的方法,沒有使用回調(diào)函數(shù) **************************/ $result = array(); $result["url"] = array( 1 => array( "loc" => "http://www.php.com/refessories/ind_10-gen_3/", "lastmod" => "2018/10/09" ), 2 => array( "loc" => "http://www.php.com/refeessories/ind_12-gen_5/", "lastmod" => "2018/10/09" ), 3 => array( "loc" => "http://www.php.com/refeessories/ind_15-gen_5/", "lastmod" => "2018/10/09" ), ); $res = arrToXml($result, "ulrset"); // outXmlFile('www.baidu.com/sitic.xml', $res); // 自己選擇要保存的位置 var_dump($res); exit; // ========================================================== // 結(jié)果: /** * ** */* *http://www.php.com/refessories/ind_10-gen_3/ ** * *http://www.php.com/refeessories/ind_12-gen_5/ ** * *http://www.php.com/refeessories/ind_15-gen_5/ **
方法三: 回調(diào)方法,可以生成不規(guī)則的xml ( 方法調(diào)用,與方法二一樣 )
/** * @param array $arr 數(shù)組 * @param int $dom Document * @param int $item * @return string */ function arr_to_xml($arr, $dom = 0, $item = 0) { if (!$dom) { $dom = new DOMDocument("1.0"); } if (!$item) { $item = $dom->createElement("root");// 根節(jié)點(diǎn) $dom->appendChild($item); } foreach ($arr as $key => $val) { $itemx = $dom->createElement(is_string($key) ? $key : "item"); $item->appendChild($itemx); if (!is_array($val)) { $text = $dom->createTextNode($val);// 創(chuàng)建一個文本節(jié)點(diǎn) $itemx->appendChild($text); } else { arr_to_xml($val, $dom, $itemx); // 自己調(diào)用自己 } } return $dom->saveXML(); } // 或者下面的這種回調(diào)方法 /** * 把特定格式的數(shù)組轉(zhuǎn)化成XML * * @param $arr * @param string $nodeName xml子節(jié)點(diǎn) * @param string $element * @param string $Dom * @return string */ function arrTo_Xml($arr, $nodeName = 'index', $element = '', $Dom = '') { $Dom = empty($Dom) ? new DOMDocument('1.0', 'utf-8') : $Dom; if ($element == '') { $data = $Dom->createElement($nodeName); $Dom->appendChild($data); } else { $data = $element; } foreach ($arr as $key => $value) { if (is_array($value)) { if (!is_numeric($key)) { $element = $Dom->createElement($key); $data->appendChild($element); } $this->arrTo_Xml($value, $key, $element, $Dom);// 自己調(diào)用自己 } else { if ($key == "lastmod") { $element = $Dom->createElement($key); $cdata = $Dom->createCDATASection($value); // 生成日期特殊形式: $element->appendChild($cdata); } else { $element = $Dom->createElement($key, $value);// 用createElement創(chuàng)建出來的都是一行(例如:xingmimng } $data->appendChild($element);// 創(chuàng)建的一行放在哪個 xml的節(jié)點(diǎn)下 } } $Dom->formatOutput = true;// 輸出特殊形式 $result = $Dom->saveXML(); unset($Dom);// 釋放資源 return $result; } // 數(shù)據(jù)結(jié)構(gòu) $result = array(); $result["url"] = array( 1 => array( "loc" => "http://www.php.com/refessories/ind_10-gen_3/", "lastmod" => "2018/10/09" ), 2 => array( "loc" => "http://www.php.com/refeessories/ind_12-gen_5/", "lastmod" => "2018/10/09" ), 3 => array( "loc" => "http://www.php.com/refeessories/ind_15-gen_5/", "lastmod" => "2018/10/09" ), ); /************************************************************************************ * 附加: xml轉(zhuǎn)為array *************************************************************************************/ /** * 將xml轉(zhuǎn)為array * @param string $xml * return array */ function xml_to_array($xml) { if (!$xml) { return false; } //將XML轉(zhuǎn)為array //禁止引用外部xml實(shí)體 libxml_disable_entity_loader(true); $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $data; }
關(guān)于如何使用php數(shù)組轉(zhuǎn)xml問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。