首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包装每3项,并为每个问题添加一个div

包装每3项,并为每个问题添加一个div
EN

Stack Overflow用户
提问于 2022-01-04 12:16:09
回答 1查看 150关注 0票数 0

我希望每三个条目包装一次,并在这些项之后添加一个div (.expanded行),然后继续使用其他行并重复相同的行。这必须是be输出:

代码语言:javascript
运行
复制
<div class="intro row">
  <div class="item item-1">name 1</div>
  <div class="item item-2">name 2</div>
  <div class="item item-3">name 3</div>
</div>

<div class="expanded row">      
  <div class="expand" id="item-1">name 1</div>
  <div class="expand" id="item-2">name 2</div>
  <div class="expand" id="item-3">name 3</div>
</div>

<div class="intro row">
  <div class="item item-5">name 4</div>
  <div class="item item-6">name 5</div>
  <div class="item item-7">name 6</div>
</div>

<div class="expanded row">      
  <div class="expand" id="item-5">name 4</div>
  <div class="expand" id="item-6">name 5</div>
  <div class="expand" id="item-7">name 6</div>
</div>

这是我用来尝试获取它的函数:

代码语言:javascript
运行
复制
<?php // check if the repeater field has rows of data
  if( have_rows('content') ):
  // loop through the rows of data

  // add a counter
  $counter = 0;
  $group = 0;
  // Content Array
  $content_array = array();
  while ( have_rows('content') ) : the_row(); 


    $name = get_sub_field('feature_name');
    $expandedInfo = get_sub_field('feature_info');
    // Adding the Expanded Info
    $content_array[ 'item-' . $counter ] = $expandedInfo;
    if ($counter % 3 == 0) {
      $group++;
    ?>
      <div class="intro row">
    <?php 
    }
  ?>
  <div class="item item-<?php echo $counter; ?>">
    <?php echo $name ?>
  </div><!-- item-->


  <?php 
    if ($counter % 3 == 2) {
    ?>
      </div><!-- intro-->
      <div class="expanded row">
        <?php 

        foreach( $content_array as $item_id => $expanded_info ) {

          echo '<div class="expanded" id="' . $item_id . '">';
          echo $expanded_info;
          echo $name;
          echo '</div>';

        } ?>
      </div>
      <?php 
      // Resetting the Array
      $content_array = array();
    }
    $counter++;
    endwhile;
  else :
  // no rows found
  endif;

  ?>

我遇到的问题是,for each函数只显示expanded row上的最后一个$name (名称3和名称6),因此这就是我现在的输出,知道问题是什么以及如何解决吗?

代码语言:javascript
运行
复制
<div class="intro row">
  <div class="item item-1">name 1</div>
  <div class="item item-2">name 2</div>
  <div class="item item-3">name 3</div>
</div>

<div class="expanded row">      
  <div class="expand" id="item-1">name 3</div>
  <div class="expand" id="item-2">name 3</div>
  <div class="expand" id="item-3">name 3</div>
</div>

<div class="intro row">
  <div class="item item-5">name 4</div>
  <div class="item item-6">name 5</div>
  <div class="item item-7">name 6</div>
</div>

<div class="expanded row">      
  <div class="expand" id="item-5">name 6</div>
  <div class="expand" id="item-6">name 6</div>
  <div class="expand" id="item-7">name 6</div>
</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-04 12:27:25

我确信这是因为您的foreach()存在于if($counter % 3 == 2)语句中,而$name不存在于$content_array中,因此$name的值始终是迭代$counter % 3 == 2,并将与$content_array的长度一样多次地回显。

我必须说,这个循环构造不是非常健壮和可读的。考虑以一种更“最佳实践”和可伸缩的方式重写您的循环。我不知道您的用户/cms函数在后台做什么,所以很难指出另一种方法。同时,尝试正确地转义页面上的所有回显内容。但这都不是话题。

因此,为了快速修复,请尝试将$name包含在$content_array中,例如:

代码语言:javascript
运行
复制
$content_array[ 'item-' . $counter ] = array( $expandedInfo, $name );

然后将您的foreach()更改为:

代码语言:javascript
运行
复制
foreach ( $content_array as $item_id => $info_and_name ) {
    echo '<div class="expanded" id="' . $item_id . '">';
    echo $info_and_name[0];
    echo $info_and_name[1];
    echo '</div>';
}

我认为应该这样做;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70578646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档