2013-10-16 45 views
0

我想知道如果你們中的任何一個人能幫我解決我遇到的問題。我搜索了周圍,但似乎無法找到解決方案,所以想我會問這裏:)使用數組值創建一個SimpleXML值字符串

基本上我有一個數組,包含field_id我想要使用和值是另一個數組包含元素名稱需要串在一起訪問包含我希望檢索的值的SimpleXML節點。

E.G.

array (
     'route_id' => array('Services', 'Service', 'ServiceCode'), 
     'agency_id' => array('Services', 'Service', 'RegisteredOperatorRef'), 
     'route_short_name' => array('Services', 'Service', 'LineName'), 
     'route_long_name' => '', 
     'route_desc' => array('Services', 'Service', 'Description'), 
     'route_type' => array('Services', 'Service', 'Mode'), 
     'route_url' => '', 
     'route_color' => '', 
     'route_text_color' => '', 
    ); 

正如你可以看到ID爲 'ROUTE_ID' 被包含在

$xmlobject->Services->Service->ServiceCode 

等等等等。

現在,當我處理這一特定領域我試圖用

implode('->', $fields) 

內爆領域的這種方法基本上似乎並不奏效,並返回空的,但我可以訪問值我物理型走完全相同的路徑。

我想知道是否有任何解決方案,或者我將不得不尋找一種替代方式來寫這個?

非常感謝

安德魯

+0

' - >'是一個操作符,所以你不能「內爆」構建一個「操作符鏈」......儘管'eval'可以接受。 – Passerby

回答

0

->是一個操作符,所以如果你真的將其建成串並要求PHP解析它,你需要嘗試eval()

但你不必,你可以鏈到你的目的地有一些類型的循環:

function findText($entry,array $api,SimpleXMLElement $xml) 
{ 
    if(!empty($api[$entry])) 
    { 
     $cache=$xml; 
     foreach($api[$entry] as $node) 
     { 
      $cache=$cache->{$node}; 
     } 
     return (String)$cache; 
    } 
    else 
    { 
     return null; 
    } 
} 

Online demo數據如下:

XML:

<?xml version="1.0"?> 
<root> 
    <Services> 
     <Service> 
      <ServiceCode>Route ID</ServiceCode> 
      <RegisteredOperatorRef>Agency ID</RegisteredOperatorRef> 
      <LineName>Route Short Name</LineName> 
      <Description>Route Description</Description> 
      <Mode>Route Type</Mode> 
     </Service> 
    </Services> 
</root> 
$xml=simplexml_load_string(/* XML */); 
$api=array (
    'route_id' => array('Services', 'Service', 'ServiceCode'), 
    'agency_id' => array('Services', 'Service', 'RegisteredOperatorRef'), 
    'route_short_name' => array('Services', 'Service', 'LineName'), 
    'route_desc' => array('Services', 'Service', 'Description'), 
    'route_type' => array('Services', 'Service', 'Mode') 
); 
echo findText("route_id",$api,$xml); 

Echos Route ID PHP 5.1及更高版本(儘管您可能想添加在路徑不正確的情況下,循環中的一些錯誤處理代碼或類似)。

+0

謝謝路人,我最終使用了這種方法。循環遍歷每個數組迭代到終點。 :) –

相關問題