วิธีแปลงอาเรย์เป็น SimpleXML


คำตอบ:


209

สั้น ๆ :

<?php

$test_array = array (
  'bla' => 'blub',
  'foo' => 'bar',
  'another_array' => array (
    'stack' => 'overflow',
  ),
);
$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($test_array, array ($xml, 'addChild'));
print $xml->asXML();

ผลลัพธ์ใน

<?xml version="1.0"?>
<root>
  <blub>bla</blub>
  <bar>foo</bar>
  <overflow>stack</overflow>
</root>

มีการสลับคีย์และค่า - คุณสามารถแก้ไขได้ด้วยarray_flip()ก่อนที่ array_walk array_walk_recursiveต้องการ PHP 5. คุณสามารถใช้array_walkแทน แต่คุณจะไม่ได้รับ'stack' => 'overflow'ใน xml แล้ว


53
สิ่งนี้จะไม่ทำงานหาก $ test_array มี 'more_another_array' เช่น 'another_array' เนื่องจากคีย์ 'another_array' ไม่ถูกแปลง ดังนั้นคุณจะมี '<overflow> สแต็ก </overflow> หลาย'
understack

11
array_flipจะไม่ทำงานในขณะที่มันไม่สามารถพลิกอาร์เรย์ (เช่นanother_arrayภายในอาร์เรย์หลัก)
แร่

14
องค์ประกอบ xml "another_array" อยู่ที่ไหน ทุกอย่างแบนราบลง :(
FMaz008

2
ทำงานได้ดีเมื่อฉันเพิ่ม array_flip ก่อนที่ array_walk_recursive ขอบคุณ
Mike Purcell

12
การลดลงเนื่องจากarray_flipใช้ได้เฉพาะในกรณีที่ไม่มีค่าที่เหมือนกัน
Martijn

386

นี่คือโค้ด php 5.2 ซึ่งจะแปลงอาเรย์ของความลึกใด ๆ เป็นเอกสาร xml:

Array
(
    ['total_stud']=> 500
    [0] => Array
        (
            [student] => Array
                (
                    [id] => 1
                    [name] => abc
                    [address] => Array
                        (
                            [city]=>Pune
                            [zip]=>411006
                        )                       
                )
        )
    [1] => Array
        (
            [student] => Array
                (
                    [id] => 2
                    [name] => xyz
                    [address] => Array
                        (
                            [city]=>Mumbai
                            [zip]=>400906
                        )   
                )

        )
)

สร้าง XML จะเป็น:

<?xml version="1.0"?>
<student_info>
    <total_stud>500</total_stud>
    <student>
        <id>1</id>
        <name>abc</name>
        <address>
            <city>Pune</city>
            <zip>411006</zip>
        </address>
    </student>
    <student>
        <id>1</id>
        <name>abc</name>
        <address>
            <city>Mumbai</city>
            <zip>400906</zip>
        </address>
    </student>
</student_info>

ตัวอย่าง PHP

<?php
// function defination to convert array to xml
function array_to_xml( $data, &$xml_data ) {
    foreach( $data as $key => $value ) {
        if( is_array($value) ) {
            if( is_numeric($key) ){
                $key = 'item'.$key; //dealing with <0/>..<n/> issues
            }
            $subnode = $xml_data->addChild($key);
            array_to_xml($value, $subnode);
        } else {
            $xml_data->addChild("$key",htmlspecialchars("$value"));
        }
     }
}

// initializing or creating array
$data = array('total_stud' => 500);

// creating object of SimpleXMLElement
$xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>');

// function call to convert array to xml
array_to_xml($data,$xml_data);

//saving generated xml file; 
$result = $xml_data->asXML('/file/path/name.xml');

?>

เอกสารเกี่ยวกับการSimpleXMLElement::asXMLใช้งานในข้อมูลโค้ดนี้


40
IMO นี้เป็นทางออกที่ดีกว่าคำตอบที่ยอมรับ อย่างไรก็ตามนี่มีข้อ จำกัด ว่าด้วยอาร์เรย์ที่มีคีย์ตัวเลขจะสร้าง XML ที่มีรูปแบบไม่ถูกต้อง <0> <1> <2> ไม่ใช่ชื่อโหนดที่ถูกต้อง
KOGI

2
อย่างไรก็ตามถ้าอาเรย์แบบตัวเลขของคุณมีอาเรย์ตัวอื่นที่ไม่ได้ใช้คีย์แบบตัวเลขก็จะไม่เกิดขึ้น
ไบรอันจิ๊บจ๊อย

15
@KOGI ฉันแก้ไขคำตอบของฮันแมนท์แล้ว ตอนนี้มันสนับสนุนอาร์เรย์หลายระดับ pastebin.com/pYuXQWee
Mifas

1
ตัวอย่างนี้หนีอักขระพิเศษอย่างชัดเจนในข้อมูลข้อความองค์ประกอบโดยใช้ htmlspecialchars แต่ SimpleXMLElement :: addChild แปลอักขระพิเศษ xml ไปยังเอนทิตี char ของพวกเขาโดยอัตโนมัติเพื่อให้ htmlspecialchars สามารถออกได้ สิ่งที่น่าสนใจดูเหมือนว่าจะไม่ส่งผลให้มีการหลบหนีข้อมูลซ้ำซ้อน
mbaynton

3
@Alex การแก้ไข # 5 ของคุณทำให้ตัวอย่างล้มเหลว มันแทรก <item $ x> ก่อนแต่ละระเบียน <student> ทำให้เอาต์พุต XML ไม่ใช่สิ่งที่ผู้เขียนต้องการ อาจให้ตัวอย่างของปัญหาที่คุณพยายามแก้ไขและเราสามารถหาวิธีแก้ไขปัญหาอื่นสำหรับทั้งสองกรณี เอาฉันไปสักพักก่อนที่ฉันจะรู้ว่ารหัสผู้แต่งนั้นถูกแก้ไข
นิโคลัส Blasgen

124

คำตอบที่ให้ไว้ที่นี่จะแปลงอาร์เรย์เป็น XML ด้วยโหนดเท่านั้นคุณจะไม่สามารถตั้งค่าแอตทริบิวต์ได้ ฉันได้เขียนฟังก์ชัน php ที่ช่วยให้คุณแปลงอาร์เรย์เป็น php และตั้งค่าคุณลักษณะสำหรับโหนดเฉพาะใน xml ข้อเสียของที่นี่คือคุณต้องสร้างอาเรย์ด้วยวิธีการเฉพาะโดยมีข้อตกลงเล็กน้อย (เฉพาะในกรณีที่คุณต้องการใช้แอททริบิวต์)

ตัวอย่างต่อไปนี้จะช่วยให้คุณสามารถตั้งค่าแอตทริบิวต์ใน XML ได้เช่นกัน

แหล่งที่มาสามารถพบได้ที่นี่: https://github.com/digitickets/lalit/blob/master/src/Array2XML.php

<?php    
$books = array(
    '@attributes' => array(
        'type' => 'fiction'
    ),
    'book' => array(
        array(
            '@attributes' => array(
                'author' => 'George Orwell'
            ),
            'title' => '1984'
        ),
        array(
            '@attributes' => array(
                'author' => 'Isaac Asimov'
            ),
            'title' => 'Foundation',
            'price' => '$15.61'
        ),
        array(
            '@attributes' => array(
                'author' => 'Robert A Heinlein'
            ),
            'title' => 'Stranger in a Strange Land',
            'price' => array(
                '@attributes' => array(
                    'discount' => '10%'
                ),
                '@value' => '$18.00'
            )
        )
    )
);
/* creates 
<books type="fiction">
  <book author="George Orwell">
    <title>1984</title>
  </book>
  <book author="Isaac Asimov">
    <title>Foundation</title>
    <price>$15.61</price>
  </book>
  <book author="Robert A Heinlein">
    <title>Stranger in a Strange Land</title>
    <price discount="10%">$18.00</price>
  </book>
</books>
*/
?>

9
ฉันคิดว่าไม่มีใครทำปฏิกิริยากับอันนี้ คลาสนี้มีประโยชน์จริง ๆ เพราะทำตรงข้ามกับสิ่งที่ simpleXMLElement จะสร้าง ดังนั้นจึงช่วยให้คุณสามารถใช้ SimpleXMLElement ได้ทั้งสองวิธี
FMaz008

4
ฉันจะทำเครื่องหมายว่าเป็นคำตอบแทนกระแส คำตอบปัจจุบันไม่สร้างอาร์เรย์แบบเรียกซ้ำ
Oleksandr IY

2
ชั้นดี ผมเปลี่ยนสาย 128 if(!is_array($arr)) {ไปif(!is_array($arr) && $arr !== '') {เพื่อที่จะไม่ได้ผนวกโหนดข้อความใหม่สำหรับสตริงที่ว่างเปล่าและดังนั้นจึงช่วยให้จดชวเลขรูปแบบแท็กที่ว่างเปล่าเช่น'tag'=>''เป็น<tag/>แทน<tag></tag>
user1433150

นี่คือคำตอบที่ดีที่สุด นอกจากนี้ยังมีโครงสร้างที่ถูกต้องของหลายรายการที่มีคีย์เดียวกัน: ที่ 1 คือคีย์ชื่อโหนดจากนั้นจะมีอาร์เรย์ที่มีคีย์ตัวเลข (ตรงข้ามกับคำตอบของ Hanmant)
Vasil Popov

1
พบ github จากผู้แต่ง @Legionar github.com/digitickets/lalit/blob/master/src/Array2XML.php
Daryl Teo

57

ฉันพบคำตอบทั้งหมดเพื่อใช้รหัสมากเกินไป นี่เป็นวิธีง่ายๆในการทำ:

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);
        }   
    }   
}   

จากนั้นมันเป็นเรื่องง่าย ๆ ในการส่งอาเรย์เข้าสู่ฟังก์ชั่นซึ่งใช้การเรียกซ้ำดังนั้นมันจะจัดการอาเรย์หลายมิติ:

$xml = new SimpleXMLElement('<rootTag/>');
to_xml($xml, $my_array);

ตอนนี้ $ xml มีออบเจ็กต์ XML ที่สวยงามตามอาร์เรย์ของคุณอย่างที่คุณเขียนไว้

print $xml->asXML();

9
ฉันรักทางออกนี้มากที่สุด if ( is_numeric( $key ) ) $key = "numeric_$key"; ถึงแม้ว่ามันจะดีที่จะเพิ่มการทดสอบบนแป้นตัวเลขเช่น:
wout

@wout ดีจับ ที่เพิ่ม ฉันได้ตรวจสอบการใช้งานจริงแทน is_numeric เพราะ is_numeric สามารถให้บางอย่างได้แม้ว่าจะคาดว่าในทางเทคนิคผลลัพธ์ที่จะทำให้คุณผิดหวังจริงๆ
ฟรานซิสลูอิส

ฉันใช้ฟังก์ชั่นนี้ แต่เปลี่ยนเป็นการ$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><rootTag/>');เข้ารหัส UTF-8 ที่ถูกต้อง
Daantje

ฉันชอบวิธีนี้มากที่สุดเช่นกันง่ายๆ :-) หนึ่งข้อสังเกต: คุณอาจต้องการเปลี่ยน$object->addChild($key, $value);เป็น$object->addChild($key, htmlspecialchars($value));เพื่อป้องกันไม่ให้ล้มเหลวเมื่อค่า $ มีอักขระเช่น "&" ที่ต้องการการเข้ารหัส XML
leo

38
<php?
ฟังก์ชัน array_to_xml (อาร์เรย์ $ arr, SimpleXMLElement $ xml)
{
    foreach ($ arr เป็น $ k => $ v) {
        is_array ($ V)
            ? array_to_xml ($ v, $ xml-> addChild ($ k))
            : $ xml-> addChild ($ k, $ v);
    }
    ส่งคืน $ xml;
}

$ test_array = อาร์เรย์ (
    'bla' => 'blub'
    'foo' => 'บาร์'
    'another_array' => อาร์เรย์ (
        'stack' => 'ล้น'
    )
);

echo array_to_xml ($ test_array, SimpleXMLElement ใหม่ ('<root />')) -> asXML ();

1
สิ่งนี้จะล้มเหลวหากอาร์เรย์ของคุณมีอาร์เรย์ภายในพร้อมดัชนีตัวเลข <0> ... </0> ไม่ใช่ XML ที่ถูกต้อง
Adriano Varoli Piazza

@AdrianoVaroliP Piazza เพียงเพิ่มสิ่งที่ชอบ$k = (is_numeric($k)) ? 'item' : $k;ภายในforeach()
AlienWebguy

หากหนึ่งในคีย์ในอาร์เรย์มีชื่อว่า "body" มันจะไม่ทำงาน - แม่นยำยิ่งกว่านั้นคีย์นั้นจะถูกละเว้นและข้ามไป พยายามคิดดูว่าทำไม
Bambax

@ Bambax เหตุผลเดียวที่ฉันคิดได้ก็คือถ้า XML ถูกแยกวิเคราะห์เป็น HTML ในภายหลัง
Brilliand

16

จาก PHP 5.4

function array2xml($data, $root = null){
    $xml = new SimpleXMLElement($root ? '<' . $root . '/>' : '<root/>');
    array_walk_recursive($data, function($value, $key)use($xml){
        $xml->addChild($key, $value);
    });
    return $xml->asXML();
}

ดูเหมือนว่าสำเนาตรงจากคำตอบที่เลือกเพียงแค่ใส่ฟังก์ชั่น
phaberest

ฉันจะเพิ่ม htmlspecialchars () ในส่วน addChild เช่นนี้: $ xml-> addChild ($ key, htmlspecialchars ($ value));
Tyreal

15

การปรับปรุงอื่น:

/**
* Converts an array to XML
*
* @param array $array
* @param SimpleXMLElement $xml
* @param string $child_name
*
* @return SimpleXMLElement $xml
*/
public function arrayToXML($array, SimpleXMLElement $xml, $child_name)
{
    foreach ($array as $k => $v) {
        if(is_array($v)) {
            (is_int($k)) ? $this->arrayToXML($v, $xml->addChild($child_name), $v) : $this->arrayToXML($v, $xml->addChild(strtolower($k)), $child_name);
        } else {
            (is_int($k)) ? $xml->addChild($child_name, $v) : $xml->addChild(strtolower($k), $v);
        }
    }

    return $xml->asXML();
}

การใช้งาน:

$this->arrayToXML($array, new SimpleXMLElement('<root/>'), 'child_name_to_replace_numeric_integers');

ขอบคุณ! ฟังก์ชั่นของคุณจะส่งคืนเนื้อหาที่แน่นอนของอาร์เรย์ n-Dim ใด ๆ
besciualex

12

นี่คือรายการของฉันเรียบง่ายและสะอาด ..

function array2xml($array, $xml = false){
    if($xml === false){
        $xml = new SimpleXMLElement('<root/>');
    }
    foreach($array as $key => $value){
        if(is_array($value)){
            array2xml($value, $xml->addChild($key));
        }else{
            $xml->addChild($key, $value);
        }
    }
    return $xml->asXML();
}


header('Content-type: text/xml');
print array2xml($array);

8

ดังนั้น ... ฉันใช้โค้ดของ onokazu (ขอบคุณ!) และเพิ่มความสามารถในการมีแท็กซ้ำใน XML และสนับสนุนคุณสมบัติหวังว่ามีคนพบว่ามีประโยชน์!

 <?php

function array_to_xml(array $arr, SimpleXMLElement $xml) {
        foreach ($arr as $k => $v) {

            $attrArr = array();
            $kArray = explode(' ',$k);
            $tag = array_shift($kArray);

            if (count($kArray) > 0) {
                foreach($kArray as $attrValue) {
                    $attrArr[] = explode('=',$attrValue);                   
                }
            }

            if (is_array($v)) {
                if (is_numeric($k)) {
                    array_to_xml($v, $xml);
                } else {
                    $child = $xml->addChild($tag);
                    if (isset($attrArr)) {
                        foreach($attrArr as $attrArrV) {
                            $child->addAttribute($attrArrV[0],$attrArrV[1]);
                        }
                    }                   
                    array_to_xml($v, $child);
                }
            } else {
                $child = $xml->addChild($tag, $v);
                if (isset($attrArr)) {
                    foreach($attrArr as $attrArrV) {
                        $child->addAttribute($attrArrV[0],$attrArrV[1]);
                    }
                }
            }               
        }

        return $xml;
    }

        $test_array = array (
          'bla' => 'blub',
          'foo' => 'bar',
          'another_array' => array (
            array('stack' => 'overflow'),
            array('stack' => 'overflow'),
            array('stack' => 'overflow'),
          ),
          'foo attribute1=value1 attribute2=value2' => 'bar',
        );  

        $xml = array_to_xml($test_array, new SimpleXMLElement('<root/>'))->asXML();

        echo "$xml\n";
        $dom = new DOMDocument;
        $dom->preserveWhiteSpace = FALSE;
        $dom->loadXML($xml);
        $dom->formatOutput = TRUE;
        echo $dom->saveXml();
    ?>

อาจเป็นประโยชน์ในการแสดงความคิดเห็นการเปลี่ยนแปลงของคุณเพื่อให้รหัสชัดเจนขึ้น ยังคงเป็นสิ่งที่ดีนอกจากนี้
StormeHawke

สิ่งนี้ใช้ได้สำหรับฉันด้วย WP All Export ผมต้องเปลี่ยนส่วน is_numeric เล็กน้อย if (is_numeric($k)) { $i = $k + 1; $child = $xml->addChild("_$i"); array_to_xml($v, $child); }
ผลการเรียนที่

4

ฉันใช้ฟังก์ชั่นสองอย่างที่ฉันเขียนสักครู่เพื่อสร้าง xml เพื่อส่งผ่านไปมาจาก PHP และ jQuery ฯลฯ ... ไม่ใช้เฟรมเวิร์กเพิ่มเติมใด ๆ เพียงแค่สร้างสตริงที่สามารถใช้กับ SimpleXML (หรือกรอบอื่น ๆ ได้) ) ...

ถ้าเป็นประโยชน์กับทุกคนโปรดใช้มัน :)

function generateXML($tag_in,$value_in="",$attribute_in=""){
    $return = "";
    $attributes_out = "";
    if (is_array($attribute_in)){
        if (count($attribute_in) != 0){
            foreach($attribute_in as $k=>$v):
                $attributes_out .= " ".$k."=\"".$v."\"";
            endforeach;
        }
    }
    return "<".$tag_in."".$attributes_out.((trim($value_in) == "") ? "/>" : ">".$value_in."</".$tag_in.">" );
}

function arrayToXML($array_in){
    $return = "";
    $attributes = array();
    foreach($array_in as $k=>$v):
        if ($k[0] == "@"){
            // attribute...
            $attributes[str_replace("@","",$k)] = $v;
        } else {
            if (is_array($v)){
                $return .= generateXML($k,arrayToXML($v),$attributes);
                $attributes = array();
            } else if (is_bool($v)) {
                $return .= generateXML($k,(($v==true)? "true" : "false"),$attributes);
                $attributes = array();
            } else {
                $return .= generateXML($k,$v,$attributes);
                $attributes = array();
            }
        }
    endforeach;
    return $return;
}   

รักทุกคน :)


4

ฉันต้องการรหัสที่จะใช้องค์ประกอบทั้งหมดภายในอาร์เรย์และถือว่าเป็นคุณลักษณะและอาร์เรย์ทั้งหมดเป็นองค์ประกอบย่อย

ดังนั้นสำหรับสิ่งที่ชอบ

array (
'row1' => array ('head_element' =>array("prop1"=>"some value","prop2"=>array("empty"))),
"row2"=> array ("stack"=>"overflow","overflow"=>"overflow")
);

ฉันจะได้อะไรแบบนี้

<?xml version="1.0" encoding="utf-8"?>
<someRoot>
  <row1>
    <head_element prop1="some value">
      <prop2 0="empty"/>
    </head_element>
  </row1>
  <row2 stack="overflow" overflow="stack"/>
 </someRoot>

เพื่อให้ได้รหัสนี้อยู่ด้านล่าง แต่ระวังให้ดีรหัสซ้ำและอาจทำให้เกิดการซ้อนทับจริง :)

function addElements(&$xml,$array)
{
$params=array();
foreach($array as $k=>$v)
{
    if(is_array($v))
        addElements($xml->addChild($k), $v);
    else $xml->addAttribute($k,$v);
}

}
function xml_encode($array)
{
if(!is_array($array))
    trigger_error("Type missmatch xml_encode",E_USER_ERROR);
$xml=new SimpleXMLElement('<?xml version=\'1.0\' encoding=\'utf-8\'?><'.key($array).'/>');
addElements($xml,$array[key($array)]);
return $xml->asXML();
} 

คุณอาจต้องการเพิ่มการตรวจสอบความยาวของอาร์เรย์เพื่อให้องค์ประกอบบางอย่างได้รับการตั้งค่าภายในส่วนข้อมูลและไม่ได้เป็นคุณลักษณะ


4

ขึ้นอยู่กับทุกสิ่งที่นี่จัดการดัชนี + แอตทริบิวต์ผ่านการเติมคำนำหน้าด้วย@และสามารถฉีด xml ไปยังโหนดที่มีอยู่:

รหัส

function simple_xmlify($arr, SimpleXMLElement $root = null, $el = 'x') {
    // based on, among others http://stackoverflow.com/a/1397164/1037948

    if(!isset($root) || null == $root) $root = new SimpleXMLElement('<' . $el . '/>');

    if(is_array($arr)) {
        foreach($arr as $k => $v) {
            // special: attributes
            if(is_string($k) && $k[0] == '@') $root->addAttribute(substr($k, 1),$v);
            // normal: append
            else simple_xmlify($v, $root->addChild(
                    // fix 'invalid xml name' by prefixing numeric keys
                    is_numeric($k) ? 'n' . $k : $k)
                );
        }
    } else {
        $root[0] = $arr;
    }

    return $root;
}//--   fn  simple_xmlify

การใช้

// lazy declaration via "queryparam"
$args = 'hello=4&var[]=first&var[]=second&foo=1234&var[5]=fifth&var[sub][]=sub1&var[sub][]=sub2&var[sub][]=sub3&var[@name]=the-name&var[@attr2]=something-else&var[sub][@x]=4.356&var[sub][@y]=-9.2252';
$q = array();
parse_str($val, $q);

$xml = simple_xmlify($q); // dump $xml, or...
$result = get_formatted_xml($xml); // see below

ผลลัพธ์

<?xml version="1.0"?>
<x>
  <hello>4</hello>
  <var name="the-name" attr2="something-else">
    <n0>first</n0>
    <n1>second</n1>
    <n5>fifth</n5>
    <sub x="4.356" y="-9.2252">
      <n0>sub1</n0>
      <n1>sub2</n1>
      <n2>sub3</n2>
    </sub>
  </var>
  <foo>1234</foo>
</x>

โบนัส: การจัดรูปแบบ XML

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 = new DOMDocument($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());

    // print
    return $dom->saveXML();
}//--   fn  get_formatted_xml

เวอร์ชันที่อัปเดตซึ่งทำซ้ำเป็นองค์ประกอบย่อยมากกว่าแท็กตัวเลข: github.com/zaus/forms-3rdparty-xpost/blob/…
drzaus

3

นี่คือฟังก์ชั่นที่หลอกลวงสำหรับฉัน:

เพียงแค่เรียกมันด้วยสิ่งที่ชอบ

echo arrayToXml("response",$arrayIWantToConvert);
function arrayToXml($thisNodeName,$input){
        if(is_numeric($thisNodeName))
            throw new Exception("cannot parse into xml. remainder :".print_r($input,true));
        if(!(is_array($input) || is_object($input))){
            return "<$thisNodeName>$input</$thisNodeName>";
        }
        else{
            $newNode="<$thisNodeName>";
            foreach($input as $key=>$value){
                if(is_numeric($key))
                    $key=substr($thisNodeName,0,strlen($thisNodeName)-1);
                $newNode.=arrayToXml3($key,$value);
            }
            $newNode.="</$thisNodeName>";
            return $newNode;
        }
    }

3

คุณสามารถใช้XMLParserที่ฉันทำงานอยู่

$xml = XMLParser::encode(array(
    'bla' => 'blub',
    'foo' => 'bar',
    'another_array' => array (
        'stack' => 'overflow',
    )
));
// @$xml instanceof SimpleXMLElement
echo $xml->asXML();

จะส่งผลให้:

<?xml version="1.0"?>
<root>
    <bla>blub</bla>
    <foo>bar</foo>
    <another_array>
        <stack>overflow</stack>
    </another_array>
</root>

3

ฉันพบวิธีแก้ปัญหานี้คล้ายกับปัญหาดั้งเดิม

<?php

$test_array = array (
  'bla' => 'blub',
  'foo' => 'bar',
  'another_array' => array (
    'stack' => 'overflow',
  ),
);

class NoSimpleXMLElement extends SimpleXMLElement {
 public function addChild($name,$value) {
  parent::addChild($value,$name);
 }
}
$xml = new NoSimpleXMLElement('<root/>');
array_walk_recursive($test_array, array ($xml, 'addChild'));
print $xml->asXML();

3

คำตอบข้างต้นส่วนใหญ่นั้นถูกต้อง อย่างไรก็ตามฉันมาพร้อมกับคำตอบนี้ซึ่งแก้ปัญหาความเข้ากันได้ของ array_walk_recursive และปัญหาของปุ่มตัวเลข มันผ่านการทดสอบทั้งหมดที่ฉันทำ:

function arrayToXML(Array $array, SimpleXMLElement &$xml) {

    foreach($array as $key => $value) {

        // None array
        if (!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);
    }
}   

ฉันได้เพิ่มคลาสทดสอบสำหรับสิ่งนี้ซึ่งคุณอาจพบว่ามีประโยชน์:

class ArrayToXmlTest extends PHPUnit_Framework_TestCase {

    public function setUp(){ }
    public function tearDown(){ }

    public function testFuncExists() {
        $this->assertTrue(function_exists('arrayToXML'));
    }

    public function testFuncReturnsXml() {
        $array = array(
            'name' => 'ardi',
            'last_name' => 'eshghi',
            'age' => 31,
            'tel' => '0785323435'
        );

        $xmlEl =  new SimpleXMLElement('<root/>');
        arrayToXml($array, $xmlEl);

        $this->assertTrue($xmlEl instanceOf SimpleXMLElement);
    }

    public function testAssocArrayToXml() {

        $array = array(
            'name' => 'ardi',
            'last_name' => 'eshghi',
            'age' => 31,
            'tel' => '0785323435'
        );

        $expectedXmlEl = new SimpleXMLElement('<root/>'); 
        $expectedXmlEl->addChild('name', $array['name']);
        $expectedXmlEl->addChild('last_name', $array['last_name']);
        $expectedXmlEl->addChild('age', $array['age']);
        $expectedXmlEl->addChild('tel', $array['tel']);

        $actualXmlEl =  new SimpleXMLElement('<root/>');
        arrayToXml($array, $actualXmlEl);

        $this->assertEquals($expectedXmlEl->asXML(), $actualXmlEl->asXML());
    }

    public function testNoneAssocArrayToXml() {

        $array = array(
            'ardi',
            'eshghi',
            31,
            '0785323435'
        );

        // Expected xml value
        $expectedXmlEl = new SimpleXMLElement('<root/>'); 
        foreach($array as $key => $value)
            $expectedXmlEl->addChild("item$key", $value);

        // What the function produces       
        $actualXmlEl =  new SimpleXMLElement('<root/>');
        arrayToXml($array, $actualXmlEl);

        $this->assertEquals($expectedXmlEl->asXML(), $actualXmlEl->asXML());
    }

    public function testNestedMixArrayToXml() {

        $testArray = array(
            "goal",
            "nice",
            "funny" => array(
                'name' => 'ardi',
                'tel'   =>'07415517499',
                "vary",
                "fields" => array(
                    'small',
                    'email' => 'ardi.eshghi@gmail.com'
                ),

                'good old days'

            ),

            "notes" => "come on lads lets enjoy this",
            "cast" => array(
                'Tom Cruise',
                'Thomas Muller' => array('age' => 24)
            )
        );

        // Expected xml value
        $expectedXmlEl = new SimpleXMLElement('<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 = new SimpleXMLElement('<root/>');
        arrayToXml($testArray, $actualXmlEl);

        $this->assertEquals($expectedXmlEl->asXML(), $actualXmlEl->asXML());
    }
}      

3

วิธีการแก้ปัญหาอื่น ๆ :

$marray=array(....);
$options = array(
                "encoding" => "UTF-8",
                "output_type" => "xml", 
                "version" => "simple",
                "escaping" => array("non-ascii, on-print, markup")
                );
$xmlres = xmlrpc_encode_request('root', $marray, $options);
print($xmlres);

สิ่งนี้มีผลที่ไม่คาดคิดในการสร้าง RPC-style XML ด้วยสิ่งต่าง ๆ เช่น methodCall, methodName, scalars และ vectors เป็นต้นมันไม่ได้แปลงอาร์เรย์เป็น XML อย่างตรงไปตรงมา
Volomike

3

ถ้าอาร์เรย์มีการเชื่อมโยงและคีย์อย่างถูกต้องมันอาจจะง่ายกว่าที่จะเปลี่ยนเป็น xml ก่อน สิ่งที่ต้องการ:

  function array2xml ($array_item) {
    $xml = '';
    foreach($array_item as $element => $value)
    {
        if (is_array($value))
        {
            $xml .= "<$element>".array2xml($value)."</$element>";
        }
        elseif($value == '')
        {
            $xml .= "<$element />";
        }
        else
        {
            $xml .= "<$element>".htmlentities($value)."</$element>";
        }
    }
    return $xml;
}

$simple_xml = simplexml_load_string(array2xml($assoc_array));

เส้นทางอื่นคือการสร้าง XML พื้นฐานของคุณก่อนเช่น

$simple_xml = simplexml_load_string("<array></array>");

จากนั้นสำหรับแต่ละส่วนของอาเรย์ของคุณใช้สิ่งที่คล้ายกับลูปการสร้างข้อความของฉันและใช้ฟังก์ชั่น simplexml "addChild" สำหรับแต่ละโหนดของอาเรย์

ฉันจะลองดูในภายหลังและอัปเดตโพสต์นี้ด้วยทั้งสองเวอร์ชัน


บิตที่ฉันพูดถึง "<array> </array>" ทำให้ฉันรู้ว่ารุ่นสตริงต้องการบางสิ่งที่คล้ายกัน โดยทั่วไปอาร์เรย์จะต้องมีหนึ่งโหนดที่อยู่ด้านนอกมาก ให้ฉันนอนหลับทั้งเรื่องฉันจะมีบางอย่างที่จับข้อผิดพลาดเริ่มแรกได้ทันที
Anthony

2

เพียงแก้ไขในฟังก์ชั่นด้านบนเมื่อคีย์เป็นตัวเลขให้เพิ่มคำนำหน้า "key_"

// initializing or creating array
$student_info = array(your array data);

// creating object of SimpleXMLElement
$xml_student_info = new SimpleXMLElement("<?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");
               }
          }
     }
}

1

คุณสามารถใช้ฟังก์ชั่นต่อไปนี้ในรหัสของคุณโดยตรง

    function artoxml($arr, $i=1,$flag=false){
    $sp = "";
    for($j=0;$j<=$i;$j++){
        $sp.=" ";
     }
    foreach($arr as $key=>$val){
        echo "$sp&lt;".$key."&gt;";
        if($i==1) echo "\n";
        if(is_array($val)){
            if(!$flag){echo"\n";}
            artoxml($val,$i+5);
            echo "$sp&lt;/".$key."&gt;\n";
        }else{
              echo "$val"."&lt;/".$key."&gt;\n";
         }
    }

}

เรียกใช้ฟังก์ชันที่มีอาร์กิวเมนต์แรกเป็นอาร์เรย์ของคุณและอาร์กิวเมนต์ที่สองต้องเป็น 1 ซึ่งจะเพิ่มขึ้นสำหรับการเยื้องที่สมบูรณ์แบบและอันดับที่สามต้องเป็นจริง

ตัวอย่างเช่นหากตัวแปรอาร์เรย์ที่จะแปลงเป็น $ array1 ดังนั้นการเรียกจะเป็นฟังก์ชันการเรียกควรถูกห่อหุ้มด้วย<pre>แท็ก

  artoxml ($ array1,1 จริง);   

โปรดดูแหล่งที่มาของหน้าหลังจากเรียกใช้งานไฟล์เพราะสัญลักษณ์ <และ> จะไม่ปรากฏในหน้า html


1
function toXML($data, $obj = false, $dom) {
    $is_first_level = false;
    if($obj === false) {
        $dom = new DomDocument('1.0');
        $obj = $dom;
        $is_first_level = true;
    }

    if(is_array($data)) {
        foreach($data as $key => $item) {
            $this->toXML($item, $obj->appendChild($dom->createElement($key)), $dom);
        }
    }else {
        $obj->appendChild($dom->createTextNode($data));
    }

    if($is_first_level) {
        $obj->formatOutput = true;
        return $obj->saveXML();
    }
    return $obj;
}

นี่เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการสร้าง DOMDocument xml ขอบคุณ @Andrey
altsyset

1
function array2xml(array $data, SimpleXMLElement $object = null, $oldNodeName = 'item')
{
    if (is_null($object)) $object = new SimpleXMLElement('<root/>');
    $isNumbered = true;
    $idx = 0;
    foreach ($data as $key => $x)
        if (is_string($key) || ($idx++ != $key + 0))
            $isNumbered = false;
    foreach ($data as $key => $value)
    {   
        $attribute = preg_match('/^[0-9]/', $key . '') ? $key : null;
        $key = (is_string($key) && !preg_match('/^[0-9]/', $key . '')) ? $key : preg_replace('/s$/', '', $oldNodeName);
        if (is_array($value))
        {
            $new_object = $object->addChild($key);
            if (!$isNumbered && !is_null($attribute)) $new_object->addAttribute('id', $attribute);
            array2xml($value, $new_object, $key);
        }
        else
        {
            if (is_bool($value)) $value = $value ? 'true' : 'false';
            $node = $object->addChild($key, htmlspecialchars($value));
            if (!$isNumbered && !is_null($attribute) && !isset($node->attributes()->id))
                $node->addAttribute('id', $attribute);
        }
    }
    return $object;
}

ฟังก์ชันนี้ส่งคืนตัวอย่างรายการ <obj>...</obj> <obj> ... </obj> แท็ก XML สำหรับดัชนีตัวเลข

การป้อนข้อมูล:

    array(
    'people' => array(
        'dog',
        'cat',
        'life' => array(
            'gum',
            'shoe',
        ),
        'fish',
    ),
    array('yeah'),
)

เอาท์พุท:

<root>
    <people>
        <people>dog</people>
        <people>cat</people>
        <life>
            <life>gum</life>
            <life>shoe</life>
        </life>
        <people>fish</people>
        <people>
            <people>yeah</people>
        </people>
    </people>
</root>

สิ่งนี้ควรตอบสนองความต้องการทั่วไปทั้งหมด บางทีคุณอาจเปลี่ยนบรรทัดที่ 3 เป็น:

$key = is_string($key) ? $key : $oldNodeName . '_' . $key;

หรือถ้าคุณกำลังทำงานกับพหูพจน์ที่ลงท้ายด้วย s:

$key = is_string($key) ? $key : preg_replace('/s$/', '', $oldNodeName);

1

ด้วยFluidXMLคุณสามารถสร้างเริ่มต้นจากPHP Array , XML สำหรับSimpleXMLด้วย ... เพียงสองบรรทัดของโค้ด

$fluidxml  = fluidxml($array);
$simplexml = simplexml_import_dom($fluidxml->dom());

อาร์เรย์ตัวอย่างอาจเป็น

$array = [ 'doc' => [
              'fruit' => 'orange',
              'cake'  => [
                   '@id' => '123', 
                   '@'   => 'tiramisu' ],
              [ 'pasta' => 'matriciana' ],
              [ 'pasta' => 'boscaiola'  ]
] ];

https://github.com/servo-php/fluidxml


0

คุณอาจใช้ xmlrpc_encode เพื่อสร้าง xml จากอาร์เรย์หาก verbose xml ไม่ใช่ปัญหา www.php.net/xmlrpc_encode

ระวัง xml ที่สร้างขึ้นจะแตกต่างกันในกรณีที่คุณใช้การเชื่อมโยงและ / หรือปุ่มตัวเลข

<?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);
?>

ฟังก์ชั่นนี้ไม่ได้รับการสนับสนุนและอันที่จริงไม่มีอยู่ในบิลด์ PHP 5.2.16 หรือ PHP 5.3.5 ของฉัน (ส่งคืน“ ข้อผิดพลาดร้ายแรงของ PHP: โทรไปยังฟังก์ชันที่ไม่ได้กำหนด xmlrpc_encode ()”)
danorton

คุณต้องยกเลิกการคอมเม้นท์บรรทัดต่อไปนี้ใน php.ini: extension = php_xmlrpc.dll
w35l3y

@ w35l3y ฉันตรวจสอบ ini ของฉัน มันไม่ได้มีส่วนขยายนั้นและฉันใช้ v 5.3.6
Mike S.

0
function array2xml($array, $xml = false){

    if($xml === false){

        $xml = new SimpleXMLElement('<?xml version=\'1.0\' encoding=\'utf-8\'?><'.key($array).'/>');
        $array = $array[key($array)];

    }
    foreach($array as $key => $value){
        if(is_array($value)){
            $this->array2xml($value, $xml->addChild($key));
        }else{
            $xml->addChild($key, $value);
        }
    }
    return $xml->asXML();
}

0

คำตอบของฉันคือคำตอบของคนอื่น สิ่งนี้ควรแก้ไขสำหรับความล้มเหลวในการชดเชยคีย์ตัวเลข:

function array_to_xml($array, $root, $element) {
    $xml = new SimpleXMLElement("<{$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()presumes ฟังก์ชั่นที่อาร์เรย์ถูกสร้างขึ้นจากแผงปุ่มกดตัวเลขแรก ถ้าอาเรย์ของคุณมีองค์ประกอบเริ่มต้นคุณจะปล่อยforeach()และ$elemคำสั่งจากarray_to_xml()ฟังก์ชั่นและเพียงผ่าน$xmlแทน


0

ฉันจะให้ความเห็นคำตอบที่โหวตมากที่สุดเป็นอันดับสองเพราะมันไม่ได้รักษาโครงสร้างและสร้าง XML ที่ไม่ดีหากมีอาร์เรย์ภายในที่จัดทำดัชนีเป็นตัวเลข

ฉันพัฒนาเวอร์ชันของฉันเองเพราะฉันต้องการตัวแปลงอย่างง่ายระหว่าง json และ xml โดยไม่คำนึงถึงโครงสร้างของข้อมูล เวอร์ชันของฉันเก็บรักษาข้อมูลคีย์ตัวเลขและโครงสร้างของอาร์เรย์ดั้งเดิม มันสร้างองค์ประกอบสำหรับค่าการจัดทำดัชนีตัวเลขโดยการตัดค่าให้กับองค์ประกอบที่มีค่าชื่อด้วยคีย์ - แอตทริบิวต์ที่มีคีย์ตัวเลข

ตัวอย่างเช่น

array('test' => array(0 => 'some value', 1 => 'other'))

แปลงเป็น

<test><value key="0">some value</value><value key="1">other</value></test>

รุ่นของฉัน array_to_xml -function (หวังว่าจะช่วยให้ใครบางคน :)

function array_to_xml($arr, &$xml) {
    foreach($arr as $key => $value) {
        if(is_array($value)) {
            if(!is_numeric($key)){
                $subnode = $xml->addChild("$key");
            } else {
                $subnode = $xml->addChild("value");
                $subnode->addAttribute('key', $key);                    
            }
            array_to_xml($value, $subnode);
        }
        else {
            if (is_numeric($key)) {
                $xml->addChild("value", $value)->addAttribute('key', $key);
            } else {
                $xml->addChild("$key",$value);
            }
        }
    }
}   

0

โครงสร้าง XML ทั้งหมดถูกกำหนดเป็น $ data Array:

function array2Xml($data, $xml = null)
{
    if (is_null($xml)) {
        $xml = simplexml_load_string('<' . key($data) . '/>');
        $data = current($data);
        $return = true;
    }
    if (is_array($data)) {
        foreach ($data as $name => $value) {
            array2Xml($value, is_numeric($name) ? $xml : $xml->addChild($name));
        }
    } else {
        $xml->{0} = $data;
    }
    if (!empty($return)) {
        return $xml->asXML();
    }
}

0

หากคุณทำงานในวีโอไอพีและคุณมีอาเรย์แบบนี้

$test_array = array (
    '0' => array (
            'category_id' => '582',
            'name' => 'Surat',
            'parent_id' => '565',
            'child_id' => '567',
            'active' => '1',
            'level' => '6',
            'position' => '17'
    ),

    '1' => array (
            'category_id' => '567', 
            'name' => 'test',
            'parent_id' => '0',
            'child_id' => '576',
            'active' => '0',
            'level' => '0',
            'position' => '18'
    ),
);

ดังนั้นนี่เป็นวิธีที่ดีที่สุดในการแปลงอาเรย์เชื่อมโยงเป็นรูปแบบ xml ใช้รหัสนี้ในไฟล์ควบคุม

$this->loadLayout(false);
//header ("content-type: text/xml");
$this->getResponse()->setHeader('Content-Type','text/xml');
$this->renderLayout();

$clArr2xml = new arr2xml($test_array, 'utf-8', 'listdata');
$output = $clArr2xml->get_xml();
print $output; 

class arr2xml
{
var $array = array();
var $xml = '';
var $root_name = '';
var $charset = '';

public function __construct($array, $charset = 'utf-8', $root_name = 'root')
{
    header ("content-type: text/xml");
    $this->array = $array;
    $this->root_name = $root_name;
    $this->charset = $charset;

    if (is_array($array) && count($array) > 0) {
        $this->struct_xml($array);

    } else {
        $this->xml .= "no data";
    }
}

public function struct_xml($array)
{
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            $tag = ereg_replace('^[0-9]{1,}', 'item', $k); // replace numeric key in array to 'data'
            $this->xml .= "<$tag>";
            $this->struct_xml($v);
            $this->xml .= "</$tag>";
        } else {
            $tag = ereg_replace('^[0-9]{1,}', 'item', $k); // replace numeric key in array to 'data'
            $this->xml .= "<$tag><![CDATA[$v]]></$tag>";
        }
    }
}

public function get_xml()
{

    $header = "<?xml version=\"1.0\" encoding=\"" . $this->charset . "\"?><" . $this->root_name . ">";
    $footer = "</" . $this->root_name . ">";

    return $header . $this->xml . $footer;
}
}

ฉันหวังว่ามันจะช่วยให้ทุกคน


0

// Structered array for XML convertion.
$data_array = array(
  array(
    '#xml_tag' => 'a',
    '#xml_value' => '',
    '#tag_attributes' => array(
      array(
        'name' => 'a_attr_name',
        'value' => 'a_attr_value',
      ),
    ),
    '#subnode' => array(
      array(
        '#xml_tag' => 'aa',
        '#xml_value' => 'aa_value',
        '#tag_attributes' => array(
          array(
            'name' => 'aa_attr_name',
            'value' => 'aa_attr_value',
          ),
        ),
        '#subnode' => FALSE,
      ),
    ),
  ),
  array(
    '#xml_tag' => 'b',
    '#xml_value' => 'b_value',
    '#tag_attributes' => FALSE,
    '#subnode' => FALSE,
  ),
  array(
    '#xml_tag' => 'c',
    '#xml_value' => 'c_value',
    '#tag_attributes' => array(
      array(
        'name' => 'c_attr_name',
        'value' => 'c_attr_value',
      ),
      array(
        'name' => 'c_attr_name_1',
        'value' => 'c_attr_value_1',
      ),
    ),
    '#subnode' => array(
      array(
        '#xml_tag' => 'ca',  
        '#xml_value' => 'ca_value',
        '#tag_attributes' => FALSE,
        '#subnode' => array(
          array(
            '#xml_tag' => 'caa',
            '#xml_value' => 'caa_value',
            '#tag_attributes' => array(
              array(
                'name' => 'caa_attr_name',
                'value' => 'caa_attr_value',
              ),
            ),
            '#subnode' => FALSE,
          ),
        ),
      ),
    ),
  ),
);


// creating object of SimpleXMLElement
$xml_object = new SimpleXMLElement('<?xml version=\"1.0\"?><student_info></student_info>');


// function call to convert array to xml
array_to_xml($data_array, $xml_object);

// saving generated xml file
$xml_object->asXML('/tmp/test.xml');

/**
 * Converts an structured PHP array to XML.
 *
 * @param Array $data_array
 *   The array data for converting into XML.
 * @param Object $xml_object
 *   The SimpleXMLElement Object
 *
 * @see https://gist.github.com/drupalista-br/9230016
 * 
 */
function array_to_xml($data_array, &$xml_object) {
  foreach($data_array as $node) {
    $subnode = $xml_object->addChild($node['#xml_tag'], $node['#xml_value']);

    if ($node['#tag_attributes']) {
      foreach ($node['#tag_attributes'] as $tag_attributes) {
        $subnode->addAttribute($tag_attributes['name'], $tag_attributes['value']); 
      }
    }

    if ($node['#subnode']) {
      array_to_xml($node['#subnode'], $subnode);
    }
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.