2017-08-30 91 views
0

我有一個有序的列表,它是19個條目長(但可以改變,或多或少)。我將它列在一個下拉菜單中,但由於其長度的原因,該列正在下降到頁面的下方。Php的foreach分割列成列(最好是同樣)

我想創建一個單獨的列(ul或div),將列表等分爲2或3,或者設置列表大小,例如每個列表最多7個。

任何想法?當前代碼:

<div id="colour" class="dropmenudiv"> 
<?php 
$sql = "select * from rug_colours where id <> 0 and active = 1 order by name"; 
$rs = $database->query($sql); 
$index = 0; 
foreach($rs as $v) { 
    echo "<a href=\"//$base_url/?action=search&colour=".$v['id']."\" >".$v['name']."</a>"; 
} 
?> 
+0

讓我第一次知道嗎?你的代碼工作正常嗎?所有的價值都在下降? –

+0

[你如何將一個列表分割成均勻大小的塊?](https://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks) – Jakumi

+0

Ryan Malone您有責任檢查答案並標記出最適合您的答案。 –

回答

1

可以創建基於當前指數foreach()循環列的陣列狀

$abc = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; 
$cols = []; 
$perCol = 7; 
foreach($abc as $index => $val) { 
    $colInd = $index/$perCol; 
    $cols[$colInd][] = $val; 
} 

print_r($cols); 

這將通過7個項目每列在$abc分割數據爲3個coluns。

0

您應該使用索引變量將其分成2或3格。

以下是讓它能夠在三個部分:

$index = 0; 
foreach($rs as $v) { 
    if($index > 7){ 
     $index = 0; // reset to zero. You can also seperate it by any tag div or ul if you want 
    } 
    echo "<a href=\"//$base_url/?action=search&colour=".$v['id']."\" >".$v['name']."</a>"; 
$index++; 
} 
0

嘗試沿着線的東西:

<div id="colour" class="dropmenudiv"> 
    <?php 
    $sql = "select * from rug_colours where id <> 0 and active = 1 order by name"; 
    $rs = $database->query($sql); 
    $column_height = 7; 
    echo "<div class='column'>"; 
    foreach($rs as $idx => $v) { 
     echo "<a href=\"//$base_url/?action=search&colour=".$v['id']."\" >".$v['name']."</a>"; 
     if($idx % $column_height) echo "</div><div class='column'>"; 
    } 
    echo "</div>"; 
    ?> 

和需求相等,你可以試試這個:

$max_column_height = 7; 
$no_of_cols = ceil(count($rs)/$max_column_height); 
$column_height = floor($count($rs)/$no_of_cols); 
0

對於均勻分佈的分佈,首先將元素數除以7(或者您想要的最大行數t允許),向上舍入。這給出了列的數量。然後將元素數除以列數,向上舍入:這會給出您所需的實際行數。

我喜歡array_chunk爲了這個目的:

$maxRowCount = 7; 

$colCount = ceil(count($rs)/$maxRowCount); 
$chunkSize = ceil(count($rs)/$colCount); 

foreach(array_chunk($rs, $chunkSize) as $column) { 
    echo "<div class='column'>\n"; 
    foreach($column as $v) { 
     echo "<a href=\"//$base_url/?action=search&colour={$v['id']}\" >{$v['name']}</a>"; 
    } 
    echo "</div>\n"; 
}