1

eval()をもう一度避ける必要があります。次のような多次元配列にアクセスしたい:

$items = $xml2array[$explode_path[0]][$explode_path[1]];

$explode_path[0]と$explode_path[1]は、forループを介して計算されます。

for($i=0; $i<$count_explode; $i++) { }

現在、コード全体は次のようになっています。

function getValues($contents, $xml_path) {
    $explode_path = explode('->', $xml_path);
    $count_explode = count($explode_path);
    $xml2array = xml2array($contents);

    $correct_string = '$items = $xml2array';

    for($i=0; $i<$count_explode; $i++) {
        $correct_string .= '[$explode_path['.$i.']]';
    }

    $correct_string .= ';';
    eval($correct_string);
    return $items;
}

$contents = readfile_chunked($feed_url, true);
$items = getValues($contents, 'deals->deal'); # will get deals->deal from MySQL

foreach($items as $item) {
    echo $item['deal_title']['value'].' - '.$item['dealsite']['value'].'<br />';
}

その方法で$xml2array配列にアクセスする方法がわかりません。

$items = $xml2array[$explode_path[0]][$explode_path[1]];

どんな助けでも大歓迎です!

4

1 に答える 1

1

getValues()関数を次のように置き換えるのはどうですか?

function getValues($contents, $xml_path) {
    $explode_path = explode('->', $xml_path);
    $count_explode = count($explode_path);
    $items = xml2array($contents);

    for($i=0; $i<$count_explode; $i++) {
        $items = $items[$explode_path[$i]];
    }

    return $items;
}

編集:よりクリーンなバージョン:

function getValues($contents, $xml_path) {
    $items = xml2array($contents);

    foreach(explode('->', $xml_path) as $k)
    {
        $items = $items[$k];
    }

    return $items;
}
于 2012-05-05T04:05:25.750 に答える