我想知道是否有人可以帮助我解决我遇到的问题。我到处搜索,但似乎找不到解决方案,所以我想在这里问:)
基本上,我有一个包含要使用的field_id的数组,该值是另一个数组,其中包含需要串在一起才能访问包含我要检索的值的SimpleXML节点的元素名称。
例如
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)
这种方法基本上似乎不起作用,并返回空,但是我可以访问该值,因为我在物理上键入了完全相同的路径。
我想知道是否对此有任何解决方案,还是我必须找到一种替代的编写方式?
非常感谢
安德鲁
->
是运算符,因此,如果您真的想将其构建为字符串并要求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;
}
}
具有以下数据的在线演示:
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);
Route ID
PHP 5.1及更高版本的回声(尽管您可能希望在路径不正确或类似的情况下在循环中添加一些错误处理代码)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句