PHP: İç içe Foreach döngü sorunları

2 Cevap

Ben bir ay değere dayalı kullanıcıların bir listesini görüntülemek için çalışılıyor. Ben o zaman, vb ile ilişkili tüm kullanıcıları Ocak görüntülemek istiyor ..

Ben şimdi ilk ay için düzgün çalışıyor ne zaman sonra hiçbir şey yok. Ben kodu ve bu kodun canlı sürümünde comments çalışan bir adres: 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(); 

?>

2 Cevap

Ben düzgün çalışacaktır eğer emin değilim, ama ben biraz kodunuzu güncelledik. Lütfen $sab_month ve $month karşılaştırırken Temelde ben trim() fonksiyonu eklendi ama ben de senin kodunu biraz temizledik. PHP'de bir çift tırnaklı dize içinde değişkenleri gömebilirsiniz, böylece :-) bunları birleştirmek zorunda değilsiniz

<?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(); ?>

appearantly this if fails after the first month if ($sab_month == $month) Maybe some typo, case differences perhaps? I'd try adding

echo "Sab month == ",$sab_month,"\n script month ==",$month;
Put it just before the if. good luck


Ben, virgül bulunuyor kullanılan yankı kullanarak sadece başka bir yol şu biliyorum.