0

我想知道你们中是否有人可以帮助我解决我遇到的问题。我四处搜索,但似乎找不到解决方案,所以我想在这里问:)

基本上我有一个包含我要使用的 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)

这种方法基本上似乎不起作用并返回空,但我可以访问该值,因为我在物理上输入了完全相同的路径。

我想知道是否有任何解决方案,或者我是否必须找到另一种写这个的方法?

非常感谢

安德鲁

4

1 回答 1

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;
    }
}

在线演示,数据如下:

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);

来自 PHP 5.1 及更高版本的回声Route ID(尽管您可能希望在循环中添加一些错误处理代码以防路径不正确或类似情况)。

于 2013-10-16T09:56:17.343 回答