2010-11-12 73 views
0

我有一个数组包含“可变”数量的结果/条目。从PHP数组获取结果:如何将每5个结果包装到无序列表中?

我正常使用foreach来回显数组结果。

问题:我想从无序列表中的数组中包装每5个结果。

我不知道结果的总数,因为它是可变的。例如,如果它包含18个项目。它应该显示4个UL,前3个UL包含5个结果,最后一个UL仅包含剩余的3个项目。

这很简单吗?非常感谢您的帮助。 :)

+0

可能的[每12张图像的PHP div]重复( http://stackoverflow.com/questions/3934364/displaying-display-tree-every-12-images)或[显示文件的多行永不重复](http://stackoverflow.com/questions/3934364/displaying-多行文件 - 从不重复/ 3934486#3934486)或[什么是PHP操作符%,以及如何在现实世界的示例中使用它?](http://stackoverflow.com/questions/3204919/什么是php的操作符和如何使用它在现实世界的例子)基本上每个答案暗示模运算符或array_chunk将做 – Gordon 2010-11-12 19:32:00

回答

4

我很少使用这个功能,但array_chunk似乎做你想要什么。

$chunks = array_chunk($original, 5); 
foreach ($chunks as $each_chunk) { 
     // echo out as unordered list 
    } 
0

让我们假设你把列表中的数组...

$count = 0; 
foreach ($unorderedList as $item) { 
    $count = ($count + 1)%5; 
    if ($count == 0) { 
    // wrap here 
    } 
...do the stuff for every item you need 
} 
1

这是一个相当简单的算法:

$htmlOutput = ""; 

for($i=0;$i<count($myArray);$i++) 
{ 
    if($i%5==0) 
    { 
    $htmlOutput.= "<ul>"; 
    } 
    $htmlOutput.= "<li>".$myArray[$i]."</li>"; 
    if($i%5==4) 
    { 
    $htmlOutput.= "</ul>"; 
    } 
} 

if(count($myArray)%5!=0) 
{ 
    $htmlOutput.= "</ul>"; 
} 

echo $htmlOutput; 
0

您可能需要修改此位,以满足您的要求

$cnt = 1; 
foreach ($arr as $key => $val) 
{ 
    if($cnt==1) echo "<ul>"; 

    echo "<li>$val</li>"; 
    $cnt++; 

    if($cnt==5) 
    { 

     echo "</ul>"; 
     $cnt=1; 
    } 
} 
0

如何:

<?php 

$num_per_list = 5; // change me 

$dudes = array("bill","jim","steve","bob","jason","brian","dave","joe","jeff","scott"); 
$count = 0; 
$list_items = ""; 

foreach($dudes as $dude) { 
    $break = (($count%$num_per_list) == ($num_per_list-1)); 
    $list_items .= "<li>" . $dude . "</li>"; 

    if(($break) || (count($dudes)==($count+1))) { 
    $output = "<ul>" . $list_items . "</ul>"; 
    $list_items = ""; 
    // Output html 
    echo $output; 
    } 
    $count++; 
} 

?>