2011-07-08 11 views
0

を複製し、リスト項目として全てのカテゴリを一覧表示するために私のコードです:PHPは、ここでリスト

if ($xml) { 
    foreach($xml->children() as $IRXML) {                   // SHOW ONLY 5 NEWS ITEMS 

     foreach($IRXML->children() as $newsrelease) {            // EACH NEWSRELEASE IS ONE SUBCHILD 

      // echo " <div class='news-image'>"; 
      // echo "<img src='/wp-content/themes/bby/images/news-story-01.jpg' alt=''>"; 
      // echo "</div>"; 

      $categories = $newsrelease->Categories; 
      foreach($categories->children() as $category) { 
       if ($category != "NA") { 
        echo "<li class='category ".$category."'>".$category."</li> "; 
       } 
      } 

     } 
    } 

} 

私がやりたいことだけを複製せずにカテゴリを表示することです。

答えて

0
$list_cache = array(); 

if ($xml) 
{ 
    foreach($xml->children() as $IRXML) 

    foreach($IRXML->children() as $newsrelease) 
    { 

     $categories = $newsrelease->Categories; 

     foreach($categories->children() as $category) 
     { 
      if ($category != "NA") 
      { 
       $print_category = "<li class='category ".$category."'>".$category."</li> "; 

       if(!in_array($print_category, $list_cache)) //check if you've stored in previously in this array. In such case, in_array will return true. 
       { 
        $list_cache[] = $print_category; 
        echo $print_category; 
       } 
      } 
     } 
    } 
} 

ドキュメントからin_array機能をチェックしてください。

+0

おそらく '$ arr'をどこかで宣言してください... –

+0

@AJ:これはすでに第一行目に宣言されています。 –

+0

ああ、あそこに迷って、私の悪い:) –

0

それぞれを1回だけ表示したいのですか? .children()が同じ子を2回返す場合、別の問題かもしれません。変更することができない場合、これは表示されている動作です。カテゴリ名/ IDの配列を保持し、表示するときに追加し、ループが実行されるたびに出力を書き込む前に配列の重複をチェックできます。

0

XMLを生成するときに重複を排除する方法がないとすれば、より効率的です。

ループ外の配列を作成して、カテゴリが既に表示されているかどうかを確認することができます。例:

$categories = $newsrelease->Categories; 
$seen_categories = array(); 
foreach($categories->children() as $category) { 
    if ($category != "NA" && !in_array($category,$seen_categories)) { 
     $seen_categories[]=$category; 
     echo "<li class='category ".$category."'>".$category."</li> "; 
    } 
}