2011-08-30 72 views
0

請告訴我不知道如何正確地做如下...我如何追加XML一起在PHP

$attendXml = ""; 
for ($i=0;$i<count($attendData);$i++) { 
    $attendXml += assocArrayToXML('row',$attendData[$i]); 
} 

我已經寫了錯,但我想你明白我想要做的代碼來來自以下程序。檢索organXml工作正常,問題發生在包含一些(關聯數組)的數組(無關聯),這就是問題所在。

如何將每個關聯數組的XML合併爲一個由「行」區分的XML。

function assocArrayToXML($root_element_name,$ar) 
{ 
    $xml = new SimpleXMLElement("<?xml version=\"1.0\"?><{$root_element_name}>  </{$root_element_name}>"); 
    $f = create_function('$f,$c,$a',' 
      foreach($a as $k=>$v) { 
      if(is_array($v)) { 
       $ch=$c->addChild($k); 
       $f($f,$ch,$v); 
      } else { 
       $c->addChild($k,$v); 
      } 
     }'); 
$f($f,$xml,$ar); 
return $xml->asXML(); 
} 

// Include Libraries 
include('services\OrganisationService.php'); 
include('services\AttendeeService.php'); 

// Target Organisation 
$organ_id = 1; 

// Read Organisation Data 
$organServ = new OrganisationService(); 
$organData = $organServ->getOrganisationByID($organ_id); 
$organXml = assocArrayToXML('organisation',$organData); 

// Read Attendees Data (For Organisation) 
$attendServ = new AttendeeService(); 
$attendData = $attendServ->getAllActiveAttendeeByOrg($organ_id); 

$attendXml = ""; 
for ($i=0;$i<count($attendData);$i++) { 
    $attendXml += assocArrayToXML('row',$attendData[$i]); 
} 

//var_dump($attendData); 
header ("Content-Type:text/xml"); 
echo $attendXml; 
?> 
+0

我不知道你使用的是什麼版本的PHP,但是如果它是5.3+,你應該看看使用lambda /匿名函數而不是'create_function' http://php.net/manual/en/functions.anonymous .PHP – Endophage

回答

0

您需要根據創建整個xml文檔字符串時創建的關聯數組來分隔樹中節點的創建。我還建議不要使用create_function來定義遞歸函數,而應考慮創建一個用於處理XML呈現的類。