用于呈现有限数据的PHP for循环

用于呈现有限数据的PHP for循环,php,for-loop,foreach,Php,For Loop,Foreach,我使用FlowPlayer jquery来显示最近的20个热门项目,这些项目将直接从数据库中调用 扭转是流动球员跳水 一个div可以携带5件物品,像这样我必须添加4个div 每个div只包含数据库中的5项,但问题是如何在这4个div中平均分割数据库 我尝试了以下代码,但它只显示开始的5,如何在另一个div中显示下一个5,等等 $i = 0; foreach($data as $idx=>$project_name) { echo '<div>'; echo $p

我使用FlowPlayer jquery来显示最近的20个热门项目,这些项目将直接从数据库中调用

扭转是流动球员跳水

一个div可以携带5件物品,像这样我必须添加4个div

每个div只包含数据库中的5项,但问题是如何在这4个div中平均分割数据库

我尝试了以下代码,但它只显示开始的5,如何在另一个div中显示下一个5,等等

$i = 0;
foreach($data as $idx=>$project_name)
{
    echo '<div>';
    echo $project_name['ProjectImage'];
    echo '</div>';
    if (++$i == 5) break;

}
$i=0;
foreach($idx=>$project\U name形式的数据)
{
回声';
echo$project_name['projectmage'];
回声';
如果(++$i==5)中断;
}
以及对我有帮助的逻辑?

$i=0;
$i = 0;
foreach($data as $idx=>$project_name) {
   if ($i == 0) echo '<div>';
   echo $project_name['ProjectImage'];
   $i++;
   if ($i == 5) { 
      echo '</div>';
      $i = 0;
   }
}
foreach($idx=>$project\U name形式的数据){ 如果($i==0)回显“”; echo$project_name['projectmage']; $i++; 如果($i==5){ 回声'; $i=0; } }
我会:

$i = 1;
foreach($data as $idx=>$project_name)
{
 if (($i = 1) || (($i % 5) == 0)){
    echo '<div>';
}
    echo $project_name['ProjectImage'];
 if (($i = 1) || (($i % 5) == 0)){
    echo '</div>';
}
$i++

}
$i=1;
foreach($idx=>$project\U name形式的数据)
{
如果($i=1)| |($i%5)==0)){
回声';
}
echo$project_name['projectmage'];
如果($i=1)| |($i%5)==0)){
回声';
}
$i++
}
$i=0;
foreach($var=>$val的数据){
如果($i==0)回显“”;
echo$project_name['val'];
$i++;
如果($i==5){
回声';
$i=0;
}
}
在你的代码中断是唯一的问题。。。break将停止循环的执行,并使您脱离循环。 此代码对您很有用

$i=1;
$i = 1;
foreach($data as $idx=>$project_name) {
   if ($i == 1 || $i % 6 ==0) echo '<div>';
   echo $project_name['ProjectImage'];
   $i++;
   if ( $i % 6 == 0 || sizeof($data) == ( $i -1) ) {
      echo '</div>';
}
foreach($idx=>$project\U name形式的数据){ 如果($i==1 | |$i%6==0)回显“”; echo$project_name['projectmage']; $i++; 如果($i%6==0 | | sizeof($data)==($i-1)){ 回声'; }
要解决您的问题,您可以从数据的总元素中获取段数,每个段的项目大小已定义。然后您可以迭代这些段,并在每个段内执行输出():

这样使用:

$data = range(1, 15); # fake data

foreach(new ArraySegments($data, 5) as $elements) {
    printf(":::\n");
    foreach($elements as $element)
        printf(" - %s\n", $element)
        ;
    printf(";;;\n");
}
只需传递要迭代的数组(
$data
)和每个段的项数(
5
),在外部foreach中,
$elements
数组中最多有5个元素。示例输出:

:::
 - 1
 - 2
 - 3
 - 4
 - 5
;;;
:::
 - 6
 - 7
 - 8
 - 9
 - 10
;;;
:::
 - 11
 - 12
 - 13
 - 14
 - 15
;;;

我将首先使用将数组拆分为块。

是否将结果拆分为每个包含5个结果的div?在您的示例中,如果有7个元素,则最后一个(第二个)div不会关闭。在您的示例中,如果有7个元素,则最后一个(第二个)divdiv不会关闭。在您的示例中,如果有7个元素,那么最后一个(第二个)div不会关闭。也许。我不是来为所有可能的情况编写代码的……只是回答一个问题,即当5div的指定块在循环结束时必须关闭,所以sizeof($data)=($i-1)检查它是否在循环结束时!?sizeof(count的别名)将返回数组中的元素数。对于包含一个元素的数组,它将返回1。请参阅-但我只看到您在该点上已经增加了
$I
。这是我的错。
<?php
$data = range(1, 15); # fake data

$size = 5; # elements per div
$segments = range(1, count($data), $size); # segments

# iterate over segments if there are segments
if ($segments) while(each($segments))
{        
    # output per each segment:    

    echo '<div>';

    # iterate over the next $data elements, with a maximum of $size
    for($c = $size; $c-- && list($key, $item) = each($data);)
    {
        echo $item , " ";
    }

    echo '</div>', "\n";

}
class ArraySegments extends ArrayIterator {
    private $s;
    /**
     * @param array $array 
     * @param int $size of segment
     */
    public function __construct(array $array, $size) {
        $this->s = max(1, $size);
        parent::__construct($array);
    }
    public function current() {
        $segment = array();
        $c = $this->s;
        while($c && $this->valid()) {
            $segment[] = parent::current();
            --$c && $this->next();
        }
        return $segment; 
    }
}
$data = range(1, 15); # fake data

foreach(new ArraySegments($data, 5) as $elements) {
    printf(":::\n");
    foreach($elements as $element)
        printf(" - %s\n", $element)
        ;
    printf(";;;\n");
}
:::
 - 1
 - 2
 - 3
 - 4
 - 5
;;;
:::
 - 6
 - 7
 - 8
 - 9
 - 10
;;;
:::
 - 11
 - 12
 - 13
 - 14
 - 15
;;;