2010-11-12 41 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++; 
} 

?>