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 に答える