您好我正在尝试将MySQL查询结果作为列表输出,以便在每隔五行之后我想创建一个新列表。 我按照之前建议的相同方式对我的类似问题进行了分析,并将结果分为第五行,但在每个新列表中,第一个元素与上一个列表中的最后一个元素相同。
我使用了这段代码:
/*there is a mysqli query before this*/
$i = 0;
$count = $res->num_rows;
echo '<ul>';
while($obj = $res->fetch_object()){
$i++;
$exturl = $obj->link;
$extname = utf8_encode($obj->title);
echo '<li><a class="URL" title="'.$extname.'" href="'.$exturl.'" target="_blank">'.$extname.'</a></li>';
if($i % 5 == 0 && $i < $count){
echo '</ul><ul><li><a class="URL" title="'.$extname.'" href="'.$exturl.'" target="_blank">'.$extname.'</a></li>';
}
}
echo '</ul>';
问题是,我怎样才能避免重复?
答案 0 :(得分:3)
在条件中附加最后一个li是什么意思?
while($obj = $res->fetch_object()){
$i++;
$exturl = $obj->link;
$extname = utf8_encode($obj->title);
echo '<li><a class="URL" title="'.$extname.'" href="'.$exturl.'" target="_blank">'.$extname.'</a></li>';
if($i % 5 == 0 && $i > 0 && $i < $count){
echo '</ul><ul>';
}
}
因为你已经在if $ i%5语句之上回应了它。
答案 1 :(得分:2)
在呈现列表之前,解决方案(取决于返回的行数)可能是array_chunk
您的结果,从而产生一种简单的分页形式。
$results = array();
while ($obj = $res->fetch_object()) {
$results[]= $obj;
}
// Break results into sub-lists of 5 items
$lists = array_chunk($results, 5);
foreach ($lists as $list) {
echo "<ul>"
foreach ($list as $obj) {
$exturl = $obj->link;
$extname = utf8_encode($obj->title);
echo '<li><a class="URL" title="',$extname,'" href="', $exturl, '" target="_blank">', $extname, '</a></li>';
}
echo "</ul>"
}
这要求您将整个结果集加载到内存中,但这比尝试在单个循环中条件关闭和重新打开列表更清晰。
答案 2 :(得分:0)
$args=array('orderby' => 'title','order' => 'ASC','posts_per_page'=>-1 ,'post_type'=>'Product');
$loop = new WP_Query($args);'
$counter = 1;
$reccounter=1;
$total_items = count($loop);
$ColCounter=($loop->post_count)/3;
if(!empty($loop)){
print '<ul style="float:left;list-style:none;" class="productList">';
while ( $loop->have_posts() ) : $loop->the_post();
$reccounter++;
$this_char=strtoupper(substr($loop->post->post_title,0,1));
if ($this_char != $last_char) { $last_char = $this_char;
$counter++;
echo '<h2 class="productTitle">'.$last_char.'</h2>';
}
if( $ColCounter<=$reccounter){echo "</ul><ul style='float:left;list-style:none;' class='productList'>";
$reccounter=1;
}
echo"<li class='productListpad'><a href=".get_permalink($loop->post->ID). "title=".esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID).">".esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID)."</a></li>";
endwhile; echo"</ul>";
}wp_reset_query();
答案 3 :(得分:-1)
解决方案是在循环中移动if语句:
更改为:
while($obj = $res->fetch_object()){
$i++;
$exturl = $obj->link;
$extname = utf8_encode($obj->title);
if($i % 5 == 0 && $i < $count){
echo '</ul><ul><li><a class="URL" title="'.$extname.'" href="'.$exturl.'" target="_blank">'.$extname.'</a></li>';
} else {
echo '<li><a class="URL" title="'.$extname.'" href="'.$exturl.'" target="_blank">'.$extname.'</a></li>';
}
}