用于呈现有限数据的PHP for循环
我使用FlowPlayer jquery来显示最近的20个热门项目,这些项目将直接从数据库中调用 扭转是流动球员跳水 一个div可以携带5件物品,像这样我必须添加4个div 每个div只包含数据库中的5项,但问题是如何在这4个div中平均分割数据库 我尝试了以下代码,但它只显示开始的5,如何在另一个div中显示下一个5,等等用于呈现有限数据的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
$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
;;;