[英]PHP: Nested Foreach loop problems
我試圖顯示基於月份值的用戶列表。 我想顯示一月,然后顯示與之關聯的所有用戶,等等。
我現在所擁有的一切在最初的幾個月中都可以正常工作,之后卻什么也沒做。 我在代碼中有注釋,此代碼的實時版本運行在: 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();
?>
我不確定它是否可以正常運行,但是我已經對您的代碼進行了一些更新。 比較$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(); ?>
如果在第一個月之后失敗,則if ($sab_month == $month)
也許是拼寫錯誤,大小寫不同? 我會嘗試添加
echo "Sab month == ",$sab_month,"\n script month ==",$month;
將其放在if之前。
祝好運
我知道我使用了逗號,那是使用回顯的另一種方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.