循环内的Foreach循环在输出中创建重复项

时间:2014-08-13 作者:Alex Howell

我在循环中有一个foreach循环,它从一个单独的表中获取信息。该表有一个列,该列的id反映了post类型的id,因此它应该始终是唯一的。

当我查看结果时,所创建的变量($fullname)会在与$fullname事件id不共享相同id的帖子所在的行中多次显示。

Here is the code with all of the looping action

<?php
        // the loop
        if (have_posts()) : 
                $output.=\'<table class="contentTable" border="0" width="100%">\';
                $output.=\'<tr class="one-sixth">\';
                $output.=\'<th>Agency</th>\';
                $output.=\'<th>Project Description</th>\';
                $output.=\'<th>Time Frame</th>\';
                $output.=\'<th>Team Leader</th>\';
                $output.=\'<th>Volunteer Limit</th>\';
                $output.=\'</tr>\';
                while (have_posts()) : the_post();

                        //Get post attendee amount
                        $project_id = get_the_ID();
                        $attendees = $wpdb->get_var("SELECT COUNT(user_id) FROM ".$wpdb->prefix."mro_attendees WHERE event_id = ".$project_id."");

                        //Get team leader name
                        $leader = $wpdb->get_results("SELECT user_first_name, user_last_name FROM ".$wpdb->prefix."mro_attendees WHERE event_id = ".$project_id." AND user_role = \'team_leader\' LIMIT 0,1");
                        foreach ($leader as $lead) {
                        $leaderfirst = $lead->user_first_name;
                        $leaderlast = $lead->user_last_name;
                        $fullname = $leaderfirst . \' \' . $leaderlast;
                          }

                        //Title and link
                        $temp_title = get_the_title($post->ID);
                        $temp_link = get_permalink($post->ID);

                        // output all findings - CUSTOMIZE TO YOUR LIKING
                        $output.=\'<tr class="one-sixth">\';
                        $output.=\'<td><a href="\'.$temp_link.\'">\'.$temp_title.\'</a></td>\';
                        $output.=\'<td>\'.get_custom_field(\'project_description\').\'</td>\';
                        $output.=\'<td>\'.get_custom_field(\'project_timeframe\').\'</td>\';
                        $output.=\'<td>\'.$fullname.\'</td>\';
                        $output.=\'<td>\'.$attendees.\'/\'.get_custom_field(\'project_limit\').\'</td>\';
                        $output.=\'</tr>\';

                endwhile;
                $output.=\'</table><div class="clear-line"></div>\';
                //pagination links
                $output.= wp_pagenavi();
                $output.=\'<style>#pagenavi{display:none;}</style>\';
                $output.=\'<style>.wp-pagenavi{margin-bottom:20px;}</style>\';
        else:

                $output.=\'nothing found.\';

        endif;
?>
团队负责人$fullname应该根据帖子id只显示一次事件id等于循环中的事件id,但是,输出结果最终会将这些人放在与此人不共享相同事件id的项目(帖子id)的其他行中。所以他们(团队负责人的名字)在循环中出现在额外的行中,我不明白为什么会这样。上面的count查询不会导致相同的问题。

感谢并非常感谢任何能为我提供帮助的人!

1 个回复
最合适的回答,由SO网友:Milo 整理而成

这是一个php逻辑/变量问题。您的输出$fullname 是否已在该迭代的foreach. 因此,对于从未进入foreach 设置$fullname, 它仍然包含上一次迭代设置的内容。将其设置为foreach 因此,只有在输入foreach.

结束