2013-10-16 41 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

谢谢路人,我最终使用了这种方法。循环遍历每个数组迭代到终点。 :) –

相关问题