3

私はこの配列を持っています

array(2) {
  [0] =>
  array(3) {
    ['name'] => string(4) "John"
    ['lastname'] => string(3) "Don"
    ['pesel'] => string(6) "987987"
  }
  [1] =>
  array(3) {
    ['name'] => string(4) "Mike"
    ['lastname'] => string(5) "Evans"
    ['pesel'] => string(5) "89779"
  }
}

上記の配列からxmlファイルを作成したいので、このコードを使用してxmlファイルを作成します

$student_info = array($resultant_array);

// 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_info,$xml_student_info);

//saving generated xml file
$xml_student_info->asXML('inxfo.xml');



// function defination to convert array to xml
function array_to_xml($student_info, $xml_student_info) {
    foreach($student_info as $key => $value) {
            var_dump($value);
            echo '<br />';
        if(is_array($value)) {


            if(!is_numeric($key)){

                $subnode = $xml_student_info->addChild("$key");
                array_to_xml($value, $subnode);

            }
            else{

                array_to_xml($value, $xml_student_info);
            }
        }
        else { 

            $xml_student_info->addChild("$key","$value");

        }
    }
}

このコードは、このようなmiソリューションを提供します

<student_info>
  <name>John</name>
  <lastname>Dozzn</lastname>
  <pesel>987987</pesel>
  <nme>Mike</name>
  <lastname>Evans</lastname>
  <pesel>89779</pesel>
</student_info>

しかし、私はこのような結果が欲しい

 <student_info>
      <person>
         <name>John</name>
         <lastname>Dozzn</lastname>
         <pesel>987987</pesel>   
      </person>
      <person>
         <name>Mike</name>         
         <lastname>Evans</lastname>
         <pesel>89779</pesel>
    </person>
 </student_info>

xml コードに子を追加するにはどうすればよいですか?

4

1 に答える 1

2

あなたの場合、else部分を変更します:

if(!is_numeric($key)){
     $subnode = $xml_student_info->addChild("$key");
     array_to_xml($value, $subnode);
}
else{
     $subnode = $xml_student_info->addChild("person");
     array_to_xml($value, $subnode);
}

しかし、Andrej が示唆したように、おそらくもっと一般的な関数を見たいと思うでしょう。

編集:動作する私のバージョン:

$student_info = array(
    array(
        'name' => "John",
        'lastname' => "Don",
        'pesel' => "987987",
    ),
    array(
        'name' => "Mike",
        'lastname' => "Evans",
        'pesel' => "89779",
    )
);

$xml_student_info = new SimpleXMLElement("<?xml version=\"1.0\"?><student_info></student_info>");

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("person");
                array_to_xml($value, $subnode);
            }
        }
        else { 
            $xml_student_info->addChild("$key","$value");
        }
    }
}

array_to_xml($student_info, $xml_student_info);

var_dump( $xml_student_info->asXML() );

出力:

string '<?xml version="1.0"?>
<student_info><person><name>John</name><lastname>Don</lastname><pesel>987987</pesel></person><person><name>Mike</name><lastname>Evans</lastname><pesel>89779</pesel></person></student_info>

' (長さ = 211)

于 2013-03-11T10:06:16.217 に答える