如果值超过5,我希望创建一个带有来自foreach循环的li内容的2个或更多ul类。
$data = array('Barcelona','Jujuy','Cordoba','Mendoza','Galicia','Madrid','Estonia','New York');
echo '<ul class="row1">';
foreach($data as $value){
echo '<li>' . $value . '</li>';
}
echo '</ul>'
结果将是:
<ul class="row1">
<li>Barcelona</li>
...
...
</ul>
我想要的是在5个城镇之后创建一个像
这样的新ul类<ul class="row1">
<li>Barcelona</li>
...
...
...
...
</ul>
<ul class="row2">
<li>Madrid</li>
...
...
...
...
</ul>
有办法做到这一点吗?
感谢任何帮助。
答案 0 :(得分:6)
<?php
$data = array('Barcelona','Jujuy','Cordoba','Mendoza','Galicia','Madrid','Estonia','New York');
$cur = 0;
$rowNum = 1;
foreach($data as $value){
if($cur == 0)
{
echo '<ul class="row' . $rowNum . '">';
}
echo ' <li>' . $value . '</li>';
if($cur == 4)
{
echo '</ul>';
$cur = 0;
$rowNum++;
}
else
{
$cur++;
}
}
?>
答案 1 :(得分:2)
保持简单。 array_chunk()
功能听起来正是您正在寻找的。 p>
在此示例中,每个列表中将有3个项目。
$lists = array_chunk($data, 3);
$number = 1;
foreach ($lists as $items) {
echo '<ul class="row', $number++, '">';
foreach ($items as $item) {
echo '<li>', $item, '</li>';
}
echo '</ul>';
}
你也可以做一些手术(这可能会消耗相当多的内存)。如果您知道自己拥有的项目数量A
以及列表中应包含的项目数B
,那么您可以计算出需要的列表数量ceil(A / B)
:< / p>
$itemsCount = count($data);
$itemsPerList = 3;
$listsNeeded = ceil($itemsCount / $itemsPerList);
for ($i = 0; $i < $listsNeeded; $i++) {
echo '<ul class="row', ($i + 1), '">';
for ($j = 0; $j < $itemsPerList; $j++) {
$index = (($i * $itemsPerList) + $j);
if (isset($data[$index])) {
echo '<li>', $data[$index], '</li>';
} else {
break;
}
}
echo '</ul>';
}
答案 2 :(得分:0)
你可以通过计算你已经完成的数量来做到这一点。这可以通过获取变量并在foreach()
内增加变量或直接使用for()
来实现。
$amount = count($data);
$no_of_ul = 1;
for ($i=0; $i<$amount; $i++) {
if ($i % 5 == 0) {
if ($i > 0) {
echo '</ul>';
}
echo '<ul class="row'.$no_of_ul.'">';
$no_of_ul++;
}
echo '<li>'.$data[$i].'</li>';
}
$i % 5 == 0
表示“如果$i
除以5
,其余为0
”,$i = 0, 5, 10, ...
为真。有了这个,您只需要手动关闭最后一个<ul>
。
答案 3 :(得分:0)
有帮助吗?
$data = array('Barcelona','Jujuy','Cordoba','Mendoza','Galicia','Madrid','Estonia','New York');
$count = 1 ;
$len = sizeof($data);
$row = 1;
foreach($data as $value){
if($count == 1 ){
echo '<ul class="row'.$row.'">';
$row++;
}
echo '<li>' . $value . '</li>';
if($count !=1 && $count%5 == 0){
echo '</ul>';
if($len-1 != $count){
echo '<ul class="row'.$row.'">';
$row++;
}
}
$count++;
}
答案 4 :(得分:0)
我知道这是一篇较旧的文章,但我认为我会有所贡献。我有一个wp项目,我不得不在整个网站上显示很多标题/永久链接列表。
Sverri M. Olsen的回答确实使这项工作变得更快,更容易阅读并且通用...
function display_title_link_lists($args, $chunk_size) {
$query = new WP_Query( $args );
$title_link = [];
while ( $query->have_posts() ) : $query->the_post();
$title_link[get_the_title()] = get_the_permalink();
endwhile;
$output_title_link = array_chunk($title_link, $chunk_size, true);
foreach ($output_title_link as $tierOne) {
echo "<div class='col-sm col-md'><ul>";
foreach($tierOne as $key => $value) {
echo "<li><a href='$value'>$key</a></li>";
}
echo "</ul></div>";
}
wp_reset_postdata();
我能够对其进行修改,并将其用作其他项目中的另一个实用程序。