2011-07-08 37 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

你的意思是你只想顯示每一個?如果.children()兩次返回同一個孩子,那可能是另一個問題;如果它不是你可以改變的東西,並且這是你看到的行爲,那麼你可以保存一個類別名稱/ 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> "; 
    } 
}