1

こんにちは私はMySQLクエリ結果をリストとして出力しようとしているので、5行ごとに新しいリストを作成したいと思います。私は以前に私の同様の質問に対して提案されたのと同じ方法でそれを行い、5行目以降の結果を分離しますが、すべての新しいリストの最初の要素は前のリストの最後の要素と同じです。

私はこのコードを使用しました:

/*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>';

そして問題は、どうすれば重複を回避できるかということです。

4

4 に答える 4

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ステートメントの上にエコーアウトしているので。

于 2012-10-25T21:47:29.387 に答える
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>"
}

これには、結果セット全体をメモリにロードする必要がありますが、単一のループ内からリストを条件付きで閉じて再度開くことを試みるよりもはるかに明確な解決策です。

于 2012-10-25T21:49:34.473 に答える
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(); 
于 2014-02-04T13:18:52.343 に答える
-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>'; 
}
}
于 2012-10-25T21:54:44.453 に答える