2014-11-24 3 views
0

JSON (대부분의 경우), HTML (API가 아닌 호출 일 때) 및 XML [레거시 지원]의 세 가지 모드로 콘텐츠를 제공하는 RESTful API를 개발 중입니다.PHP 배열을 XML로 재귀 적으로 변환 하시겠습니까?

컨트롤러가 PHP 배열을 반환하고 뷰에서 원하는 출력으로 변환합니다. PHP에서 JSON은 json_encode를 통해, PHP에서 HTML은 뷰와 템플릿 엔진간에 전달되는 메시지를 통해 수행됩니다. 자, 다차원 PHP 배열을 처리하고 잘 형식화 된 XML로 변환하는 재귀 함수를 작성했습니다. 다음

내 함수 :이 예상대로 거의 80 %를 작업 배열을 통과하고 XML 출력을 생성한다

function recursive_xml($array, \SimpleXMLElement $xmlObj){ 
    foreach($array as $key=>$value){ 
     $xmlObj->addChild($key); 
     if(!is_array($value)){ 
      $xmlObj->$key = $value; 
     } 
     else { //Value is array 
      recursive_xml($value, $xmlObj->$key); 
     } 
    } 
    header('Content-type: text/xml'); 
    echo $xmlObj->asXML(); 
} //End recursive_xml 

. 그러나 재밌는 문제는 recursive_xml의 두 번째 호출에서 XML decalaration 전에 XML 및 ALSO에 출력을 추가한다는 것입니다. 의 테스트 케이스를 보자

$obj = new \SimpleXMLElement("<root />"); 
$array = array("a"=>"b", "c"=>"d", "e"=>array("x"=>"z", "y"=>"v")); 
recursive_xml($array, $obj); 

을 이제 출력 :

`<e><x>z</x><y>v</y></e><?xml version="1.0"?> 
<root><a>b</a><c>d</c><e><x>z</x><y>v</y></e></root>` 

XML 선언과 함께 출력의 두 번째 줄은 내가 이상적으로 원하는 것이 무엇인가. 어떤 도움을 주시면 감사하겠습니다!

답변

1

정확히 무슨 일이 일어나는지 이해하려고하지 않겠습니다.

그러나 문제는 echo으로 전화하는 것입니다. 올바른 방법으로 함수에서 SimpleXMLElement를 반환하고 함수 외부에서 asXML()echo을 반환하면 예상대로 작동합니다.

+0

굉장! 고마워. 여기 마라톤 회의 중간에, 약 90 시간 동안 똑바로 프로그래밍되었습니다 :) 아내가 나를 떠나겠다고 협박하고 있습니다 ... 당신은 구세주입니다 @ 알렉산더! –

+0

당신은 오신 것을 환영합니다. 90 시간 동안 소리가 들리지 않습니다. 큰 돈이 당신의 주머니에 닿았을 때 그녀를 위해 선물을 위해 돈을 계산했기를 바랍니다.) –