Php foreach循环每2项包装一次
嗨,斯塔克尔斯 我需要一些关于如何包装循环元素的php帮助。我想在一个Php foreach循环每2项包装一次,php,Php,嗨,斯塔克尔斯 我需要一些关于如何包装循环元素的php帮助。我想在一个中包装两个元素,因此基本上 我试过一些模,你们可以看到,一些if语句仍然存在。我将I设置为0,并试图在1%2=0时放入,但没有找到如何正确关闭标记的解决方案(应在第二项后关闭) 作为一个php新手,你有没有可能帮助我 编辑: 试试这个 <div class="puffar"> <?php //Set up the objects needed $my_
中包装两个元素,因此基本上
我试过一些模,你们可以看到,一些if语句仍然存在。我将I设置为0,并试图在1%2=0时放入
,但没有找到如何正确关闭标记的解决方案(应在第二项后关闭)
作为一个php新手,你有没有可能帮助我
编辑:
试试这个
<div class="puffar">
<?php
//Set up the objects needed
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page'));
//Get children
$children = ($post->post_parent) ? get_page_children( $post->post_parent, $all_wp_pages ) : get_page_children( $post->ID, $all_wp_pages );
$i = 0;
//Build custom items
echo "<div class='row'>";
foreach($children as $child){
?>
<div class="col-sm-6">
<div class="puff">
<div class="puff-image-holder">
<?php echo get_the_post_thumbnail( $child->ID, 'full' ); ?>
</div>
<fieldset class="linedHeadline hlmedium">
<legend><?php echo get_the_title($child->ID); ?></legend>
</fieldset>
<?php echo get_field("puff_introtext", $child->ID); ?>
<?php
$values = get_field( 'puff_lanktext', $child->ID );
if (get_field( "popup_eller_lank", $child->ID ) == "popup") {
?>
<fieldset class="linedHeadline hlmedium">
<legend><a class ="linktopage open-popup" href="<?php echo get_page_link($child->ID); ?>"><?php echo get_field( "puff_lanktext", $child->ID ); ?> </a></legend>
</fieldset>
<?php
} elseif (get_field( "popup_eller_lank", $child->ID ) == "extern") {
?>
<fieldset class="linedHeadline hlmedium">
<legend><a class ="linktopage" href="<?php echo get_field( "puff_lank", $child->ID ); ?>"><?php echo get_field( "puff_lanktext", $child->ID ); ?> </a></legend>
<?php
$i++;
if ($i % 2 == 0) {
echo "</div><div class='row'>";
}
} else { }
?>
</div>
</div>
<?php } ?>
</div>
</div>
您应该使用for
循环,而不是像这样的foreach
循环:
$i = 1;
//Build custom items
foreach($children as $child){
if($i>2){
$i =1;
}
if ($i==2) {
//close row
}
$i++;
}
for($i=0;$i
如果您可能有奇数个孩子,您必须在打印之前检查$i+1
。您就快到了:
for($i = 0; $i < count($children); $i+=2) {
$child1 = $children[$i];
$child2 = $children[$i+1];
// print both
}
//生成自定义项
回声“;
$i=0;
foreach($childrenas$child){
回应“项目”;
$i++;
如果($i%2==0&&$i!=count($children)){
回声“;
}
}
回声“”
或者:
//Build custom items
echo "<row>";
$i = 0;
foreach($children as $child) {
echo "item ";
$i++;
if ($i % 2 == 0 && $i != count($children)) {
echo "</row><row>";
}
}
echo "</row>"
这是在Wordpress中,但理解它,它将帮助您
请看一下我代码的最后一行。您需要在循环后关闭div
,而else
部分是不必要的。它工作正常。请将此标记为答案。谢谢。非常简单的解决方案。实际上我用过这个,它对未知数量的物品(包括奇数)效果最好。干得好。THX,我认为它是最可读的,是什么让代码比没有人能读的天才代码活得更长。太棒了!聪明!不要在比较中使用count($children)
,这将导致性能问题。像这样写($i=0,$count=count($children);$i<$count;$i+=2)
@ArturStępień这不是做完全相同的事情,但也将计数分配给变量吗?我认为您应该在for循环之外分配count变量。@RobertWent不,它没有。您首先拥有的循环中的代码>在第一次交互之前处理。每次交互都会比较条件中的内容,最后的内容(在最后一次;
之后)会在每次交互之后处理。因此,您应该在循环之前创建$count
变量,或者像我这样做。@ArturStępień我现在看到了,感谢您的澄清@罗伯特温特:没问题,一只小海豹刚刚出生。虽然这段代码可能会为这个问题提供一个解决方案,但最好添加上下文,说明它为什么/如何工作。这可以帮助未来的用户学习,并将这些知识应用到他们自己的代码中。在解释代码时,用户可能会以投票的形式向您提供正面反馈。
//Build custom items
echo "<row>";
$i = 0;
foreach($children as $child) {
echo "item ";
$i++;
if ($i % 2 == 0 && $i != count($children)) {
echo "</row><row>";
}
}
echo "</row>"
<?php
$i=0;
foreach($children as $child){
++$i;
if($i==1){
echo "<row>";
echo "<item>$child</item>";
}
if($i==2){
echo "<item>$child</item>";
echo "</row>"
$i=0;
}
}
if($i==1){
echo "</row>";
}
<?php $query = new WP_Query( array( 'post_type' => 'slides', 'order'=> 'DESC', 'post_status' => 'publish', 'posts_per_page' => -1) );
$posts = $query->posts;
$numOfCols = 2;
$rowCount = 0;
if(!empty($posts)){ ?>
<div class="carousel-item <?php echo ($numOfCols-1==1)?'active':''; ?>">
<div class="row">
<?php foreach ($posts as $post) { ?>
<div class="col-md-6 pt-4 pb-0 " >
<h6 class="mb-2 text-uppercase"><b><a href="<?php echo get_permalink( $post->ID); ?>" target="_blank"><?php echo $post->post_title; ?></a></b></h6>
<span><?php echo get_the_excerpt($post->ID); ?></span><span class="float-right"><a href="<?php echo get_permalink( $post->ID); ?>" target="_blank"><i _ngcontent-ttx-c19="" class="material-icons icon-image-preview" style="position: relative; top: 7px;">arrow_forward</i></a></span>
</div>
<?php
$rowCount++;
if($rowCount % $numOfCols == 0 && $rowCount != count($posts)) echo '</div></div><div class="carousel-item "><div class="row"> ';
} ?>
</div>
</div>
<?php } ?>
# Process every second item starting with the first one [0].
foreach ($array as $key => $value) {
if (($key - 1) % 2 === 0) {
continue;
}
# Do something here.
}