0

次のようなXMLがあります。

<?xml version="1.0" encoding="Windows-1250" ?> 
<offers>
<offer>
<offer_num>20790</offer_num>
<pics>
    <pic>http://old.mls.org.pl/pic!get.action?obrazId=11651</pic>
    <pic>http://old.mls.org.pl/pic!get.action?obrazId=16906</pic>
    <pic>http://old.mls.org.pl/pic!get.action?obrazId=9641</pic>
    <pic>http://old.mls.org.pl/pic!get.action?obrazId=9742</pic>
</pics>
</offer>
<offer>
<offer_num>20791</offer_num>
<pics>
    <pic>http://old.mls.org.pl/pic!get.action?obrazId=1432t</pic>
    <pic>http://old.mls.org.pl/pic!get.action?obrazId=12346906</pic>
</pics>
</offer>
</offers>

と私のPHPパーサー:

foreach($xml->offer as $estate)
{
    $offer_signature = rtrim($estate->offer_num);
    $offer_photos = array();
    foreach($estate->pics as $photos)
    {
        $photo_url = $photos->pic;
        $photo_name = $offer_signature."_".md5($photo_url).".jpg";
        $offer_photos[] = $photo_name;
        downloadPhoto($photo_url, $photo_name);
    }
}

このパーサーは機能します。XMLを解析し、downloadPhoto()関数が機能します...コードは次のとおりです。

function downloadPhoto($photo_url, $photo_name)
{
    $dt = @file_get_contents($photo_url);
    if($dt)
    {
        $h = fopen(photo_path.$photo_name, 'w+');
        flock($h, 2);
        fwrite($h, $dt, strlen($dt));
        flock($h, 3);
        fclose($h);
    }
}

画像をダウンロードしますが、オファーごとに1つの画像しかないため、パーサーコードに問題があると思いますが、実際には何がわかりません。

また、パーサーの行を変更したかった:

$photo_name = $offer_signature."_".md5($photo_url).".jpg";

したがって、$photo_nameは$offer_signature。"_"。[[picturenumber]]。"。jpg"のようになります(例:20790_01.jpg)が、問題は、foreachでコーディングする方法がわからないことです。

4

1 に答える 1

2

質問1

追加のループが必要です:

foreach($xml->offer as $estate)
{
    $offer_signature = rtrim($estate->offer_num);
    $offer_photos = array();
    foreach($estate->pics as $photos)
    {

        foreach($photos as $pic){
            $photo_url = $pic;
            $photo_name = $offer_signature."_".md5($photo_url).".jpg";
            //$offer_photos[] = $photo_name;
            var_dump((string)$photo_url, (string)$photo_name);
        }
    }
}

質問2

独自のカウンターを作成するだけです。

$count = 0;
foreach($xml->offer as $estate)
{
    foreach($estate->pics as $photos)
    {
        foreach($photos as $pic){
            var_dump(++$count, (string)$pic);
        }
    }
}
于 2012-11-15T12:24:19.280 に答える