2015-01-21 150 views
1

我有一个循环嵌套在循环中。所有的数据都显示正常,直到我到达第二个循环并且返回的数据不断重复。它达到了第二个循环中的项目歌曲重复15次以上的点。PHP foreach循环嵌套增加重复

项目 -subitems

项目 -subitems -subitems

项目 -subitems -subitems -subitems

项目 -subitems -subitems -subitems -subitems

我被告知清除我的循环,但我相信如何做到这一点。有任何想法吗? 这里有一个活生生的例子,如果需要:查看源代码:http://mixtapemonkey.com/json

<?php 
include ("connection.php"); 

foreach($db->query("SELECT * FROM mixtapes WHERE year='2014' OR year = '2015' ORDER BY id DESC LIMIT 24") as $info) { 

    echo "mixtape-".$info['id']," {\n"; 
     echo "\t\"id\" : \"".$info['id']."\",\n"; 
     echo "\t\"title\" : \"".$info['title']."\",\n"; 
     echo "\t\"name\" : \"".$info['name']."\",\n"; 
     echo "\t\"genre\" : \"".$info['genre']."\",\n"; 
     echo "\t\"year\" : \"".$info['year']."\",\n"; 
     echo "\t\"downloads\" : \"".$info['downloads']." Downloads\",\n"; 
     echo "\t\"thumb\" : \"http://mixtapemonkey.com/".$info['thumb']."\",\n"; 
     echo "\t\"songs\" : {\n"; 

      if ($handle = opendir("mixtapes/zip/".$info['id'])) { 
       while (false !== ($entry = readdir($handle))) { 
        if ($entry != "mixtapes/zip/".$info['id'] && $entry != "mixtapes/zip/".$info['id']) { 


          if ($newhandle = opendir("mixtapes/zip/".$info['id']."/".$entry)) { 
           while (false !== ($newentry = readdir($newhandle))) { 
            if ($newentry != "mixtapes/zip/".$info['id']."/".$entry && $newentry != "mixtapes/zip/".$info['id']."/".$entry) { 

             $ext = substr($newentry, strrpos($newentry, '.') + 1); 
             if ($ext == "mp3" || $ext == "m4a") 
             { 
              $item = "mixtapes/zip/".$info['id']."/".$entry."/"; 
              $musicarray[] = $newentry; 
              sort($musicarray); 
             } 
            } 
           } 
           closedir($newhandle); 
          } 

        } 
       } 
       closedir($handle); 
      } 
      foreach ($musicarray as $song) { 

      echo "\t\t\"track\" : \"http://mixtapemonkey.com/$item$song\",\n"; 
      } 

     echo "\t}\n"; 
    echo "},\n\n"; 
}?> 
+2

如果您不知道子项目的深度,请通过任何标志标识并执行RECURSION。 – TNC 2015-01-21 08:19:32

+0

@TNC是什么?为我分解它。我对此很感兴趣。 – 2015-01-21 08:37:09

+0

我的意思是说,你必须清晰地了解你的子项目上的分层树形成和向后遍历。肯定是一个RECURSION。 – TNC 2015-01-21 08:58:06

回答

0

我有同样的问题也和我把它解决了循环后采用php休息。所以你也可以试试它。

break; 
+0

这并没有多大帮助。它只是缩短我的循环。 – 2015-01-21 08:28:06

+0

你在哪里使用它的代码。 – koc 2015-01-21 08:38:09

+0

有几个地方。我能做到的最好的只是显示一个单一的子项目。它停止了重复,但是 - 子项目中有多个项目 – 2015-01-21 08:41:40