2010-01-12 132 views
1

我试图根据月份值显示用户列表。我想显示一月,然后所有与它相关的用户等...PHP:嵌套的Foreach循环问题

我现在有什么是正常工作的第一个月,然后什么都没做。我在代码和该代码的一个真人版的评论在运行:http://blog.funeraldirectorslife.com/participants/

<?php 
/* 
Template Name: Participants 
*/ 
?> 
<?php 
    function display_user($author, $month){ 
     $ID = $author->ID; 
     $full_name = get_the_author_meta('display_name', $ID); 
     $usr_name = get_the_author_meta('user_nicename', $ID); 
     $sab_descriptiom = get_cimyFieldValue("$ID", 'Sabbatical_desc'); 
     $sab_start = get_cimyFieldValue("$ID", 'Sabbatical_Start'); 
     $sab_end = get_cimyFieldValue("$ID", 'Sabbatical_End'); 
     $sab_month = get_cimyFieldValue("$ID", 'Sabbatical_Month'); 
     $author_posts = $author->num_posts; 
     //$months = array(January, February, March, April, May, June, July, August, September, October, November, December); 
     //echo $sab_month; 

     if ($sab_month == $month){ 
      echo "<li>";          
      echo "<h4 class=\"nomar\"><a href=\"http://blog.funeraldirectorslife.com/author/" 
        . $usr_name         
        ."\">" 
        .$full_name 
        ."(" 
        . $author_posts 
        . ")" 
        . "</a>" 
        . "</h4>"; 
      echo $sab_start 
        . " - " 
        . $sab_end 
        . "<br />"; 
      echo $sab_descriptiom 
        . "<br />" 
        . $sab_month . "</br>" . "</li>" . "\n"; 
     } 
     else { 
      return; 
     } 
    } 

?> 
<?php get_header(); ?> 
<div id="bd" class="grid_12 alpha omega clearfix"> 
    <?php get_sidebar(); ?> 
    <div id="main" class="grid_9 omega"> 
     <?php include(TEMPLATEPATH . '/banner.php'); ?> 

     <div class="unit"> 
      <!-- 
      <div class="head"> 
       <div class="title"><h3><span>Blog Entries</span></h3></div> 
      </div> 
      //--> 
      <div class="body clearfix"> 
       <ul class="styled_list"> 

        <li class ="alpha"><h3 class="nomar"><a href="<?php the_permalink(); ?>"><span><?php the_title(); ?></span></a></h3></li> 


        <?php      
        //grab authors ids, post count, and extended info from database 
        //fill $authors array with data 
        $sql = "SELECT * FROM `wp_users` WHERE 1 ORDER BY ID"; 
        $results = $wpdb->get_results($sql); 
        $authors = $results; 

        $author_count = array(); 
        $rows = $wpdb->get_results("SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql('post') . " GROUP BY post_author"); 
        foreach ($rows as $row) { 
         $author_count[$row->post_author] = $row->count; 
        } 
        //combine queries 
        foreach($authors as $author) { 
         $author->num_posts = (isset($author_count[$author->ID])) ? $author_count[$author->ID] : 0; 
        } 

        //month array for comparing with sabbatical month 
        $months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October','November', 'December'); 


        //tried old method for iterating arrays --> same result 
        /*reset($months); 
        while (list($key, $month) = each($months)){ 
         echo "<h2 class=\"nomar\">" . $month . "</h2>" . "\n"; 

         foreach($authors as $author) { 
          display_user($author, $month); 
          //echo $author->ID; 
         } 
        }*/ 



        foreach($months as $month) { 
         echo "<h2 class=\"nomar\">" . $month . "</h2>" . "\n"; 

         foreach($authors as $author) { 
          display_user($author, $month); 
          //echo $author->ID; 
         } 


         //lists authors by ID - just making sure array is intact after each author loop 
         /*foreach($authors as $author) { 
          $ID = $author->ID; 
          $foo = get_cimyFieldValue("$ID", 'Sabbatical_Month'); 
          echo $ID . $foo . "<br /> . "\n"";     
         }*/ 
        } 
        ?> 
       </ul> 
      </div>  
     </div> 
    </div> 
</div> 
<?php get_footer(); 

?> 
+0

可能还张贴您的display_user()函数的代码?看来问题可能在那里。 – GSto 2010-01-12 15:53:34

+0

display_user()函数位于代码顶部 – alphaexe 2010-01-12 15:55:52

+0

我对你的select语句中的where子句有点好奇。 “WHERE 1”做什么? – 2010-01-12 15:58:57

回答

1

我不确定它是否能正常工作,但我已经更新了您的代码。主要是在比较你的$sab_month$month时增加了trim()函数,但我也清理了一下你的代码。您可以嵌入变量PHP中的双引号字符串内,所以你不必将它们串联:-)

<?php /* Template Name: Participants */ ?> 

<?php 
    function display_user($author, $month){ 
     $ID = $author->ID; 
     $full_name = get_the_author_meta('display_name', $ID); 
     $usr_name = get_the_author_meta('user_nicename', $ID); 
     $sab_descriptiom = get_cimyFieldValue("$ID", 'Sabbatical_desc'); 
     $sab_start = get_cimyFieldValue("$ID", 'Sabbatical_Start'); 
     $sab_end = get_cimyFieldValue("$ID", 'Sabbatical_End'); 
     $sab_month = get_cimyFieldValue("$ID", 'Sabbatical_Month'); 
     $author_posts = $author->num_posts; 
     //$months = array(January, February, March, April, May, June, July, August, September, October, November, December); 
     //echo $sab_month; 

     if (trim($sab_month) == trim($month)){ 
      echo "<li>";          
      echo " <h4 class='nomar'><a href='http://blog.funeraldirectorslife.com/author/$usr_name'>$full_name($author_posts)</a></h4>"; 
      echo " $sab_start - $sab_end<br />"; 
      echo " $sab_descriptiom<br />"; 
      echo " $sab_month</br>"; 
       echo "</li>\n"; 
     } 
      /* Not necessary. The function will return when it hits the end 
     else { 
      return; 
     } 
      */ 
    } 

?> 
<?php get_header(); ?> 
<div id="bd" class="grid_12 alpha omega clearfix"> 
    <?php get_sidebar(); ?> 
    <div id="main" class="grid_9 omega"> 
     <?php include(TEMPLATEPATH . '/banner.php'); ?> 

     <div class="unit"> 
      <!-- 
      <div class="head"> 
       <div class="title"><h3><span>Blog Entries</span></h3></div> 
      </div> 
      //--> 
      <div class="body clearfix"> 
       <ul class="styled_list"> 

        <li class ="alpha"><h3 class="nomar"><a href="<?php the_permalink(); ?>"><span><?php the_title(); ?></span></a></h3></li> 


        <?php      
        //grab authors ids, post count, and extended info from database 
        //fill $authors array with data 
        $sql = "SELECT * FROM `wp_users` WHERE 1 ORDER BY ID"; 
        $results = $wpdb->get_results($sql); 
        $authors = $results; 

        $author_count = array(); 
        $rows = $wpdb->get_results("SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql('post') . " GROUP BY post_author"); 
        foreach ($rows as $row) { 
         $author_count[$row->post_author] = $row->count; 
        } 
        //combine queries 
        foreach($authors as $author) { 
         $author->num_posts = (isset($author_count[$author->ID])) ? $author_count[$author->ID] : 0; 
        } 

        //month array for comparing with sabbatical month 
        $months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October','November', 'December'); 


        //tried old method for iterating arrays --> same result 
        /*reset($months); 
        while (list($key, $month) = each($months)){ 
         echo "<h2 class=\"nomar\">" . $month . "</h2>" . "\n"; 

         foreach($authors as $author) { 
          display_user($author, $month); 
          //echo $author->ID; 
         } 
        }*/ 



        foreach($months as $month) { 
         echo "<h2 class='nomar'>$month</h2>\n"; 

         foreach($authors as $author) { 
          display_user($author, $month); 
          //echo $author->ID; 
         } 

         //lists authors by ID - just making sure array is intact after each author loop 
         /*foreach($authors as $author) { 
          $ID = $author->ID; 
          $foo = get_cimyFieldValue("$ID", 'Sabbatical_Month'); 
          echo $ID . $foo . "<br /> . "\n"";     
         }*/ 
        } 
        ?> 
       </ul> 
      </div>  
     </div> 
    </div> 
</div> 
<?php get_footer(); ?> 
+0

这工作。非常感谢:) – alphaexe 2010-01-12 16:20:37

+0

不客气:-) – 2010-01-12 16:22:22

0

appearantly这一点,如果第一个月if ($sab_month == $month) 也许有些错字,情况差异也许以后失败了呢?我会尝试加入

echo "Sab month == ",$sab_month,"\n script month ==",$month;
把它放在if之前。祝你好运


我知道我用逗号的,这只是另一种使用回声的方式。

+0

除非您查看源代码,否则无法看到它,但显然有些月份有额外的空间。试一下'trim($ sab_month)== trim($ month)'。 – 2010-01-12 16:05:37