2010-12-18 11 views
0

イム一部のHTML出力を生成するには、以下のPHPを使用して:問題として出力

<?php 

$url = "images.xml"; 
$xmlstr = file_get_contents($url); 
$xml = new SimpleXMLElement($xmlstr); 
$images = array(); 
$ids = array(); 

foreach ($xml->image as $image) { 

    $images[]['id'] = $image -> id; 
    $images[]['link'] = $image->href; 
    $images[]['src'] = $image->source; 
    $images[]['title'] = $image->title; 
    $images[]['alt'] = $image->alt; 
    $ids[] = $image -> id; 
} 

array_multisort($ids, SORT_ASC, $images); 

foreach ($images as $image){ 
    echo "<a href='".$image['link']."'><img src='".$image['src']."' alt='".$image['alt']."' title='".$image['title']."' /></a>"; 
} 
?> 

私はここにコードを変更した場合:

foreach ($images as $image){ 
echo $image['link']; 
    echo "Item"; 
} 

を私は画像リンクを3回を取得し、そのXMLに3つのレコードがあるため、正しいです。しかし、私はテキスト項目の12部のコピーを得る。

どうしてですか?

+1

私はあなたが間違って出力について、もう少し正確には必要だと思う - と、おそらくあなたのXMLのスニペットがあまりにも役立つだろう。私が知ることから、同じforループが3回か12回(あるいはおそらく両方とも!?)実行されていると言っています。 – Basic

+0

他のすべての人は以下を理解しています。 – CLiown

答えて

3

各属性を配列の新しい行に配置します。 これを試してみてください:

foreach ($xml->image as $image) 
{ 
    $images[] = array(
     'id' => $image->id, 
     'link' => $image->href, 
     'src' => $image->source, 
     'title' => $image->title, 
     'alt' => $image->alt 
    ); 

    $ids[] = $image -> id; 
}