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

时间:2011-07-09 07:49:29

标签: php for-loop foreach

我正在使用流媒体播放器jquery来显示最新的20个热门项目,这些项目将直接从数据库中调用。

扭曲是流动玩家div。

一个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;

}

有助于我的逻辑吗?

6 个答案:

答案 0 :(得分:1)

$i = 0;
foreach($data as $var=>$val) {
   if ($i == 0) echo '<div>';
   echo $project_name['val'];
   $i++;
   if ($i == 5) { 
      echo '</div>';
      $i = 0;
   }
}
代码中的

BREAK是唯一的问题... break会停止执行循环并让你退出循环。 这段代码可以正常使用

答案 1 :(得分: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;
   }
}

答案 2 :(得分: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++

}

答案 3 :(得分:0)

$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>';
}

答案 4 :(得分:0)

要解决您的问题,您可以使用每个细分的已定义项目大小从数据的总元素中获取细分数量。然后你可以迭代分段,并在每个分段内进行输出(Demo):

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

foreach(array_chunk($data, 5) as $items)
{
    # output per each segment:    

    echo '<div>';

    foreach($items as $item)
    {
        echo $item , " ";
    }

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

或者更自制的分块( Demo ):

<?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");
}

只需传递要迭代的数组($data)和每个段的项目数(示例中为5)。在外部foreach内部,您在$elements数组内最多有5个元素。示例输出:

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

答案 5 :(得分:0)

我会先使用array_chunk()function将数组拆分成块。