【问题标题】:Need to combine/eliminate duplicates in nested array需要合并/消除嵌套数组中的重复项
【发布时间】:2020-04-08 04:56:49
【问题描述】:

我需要创建一个按年份分组的新闻文章标题手风琴列表。到目前为止,手风琴面板的内容是正确的,每个面板都显示了当年的所有新闻帖子。

问题在于,根据当年的文章数量,我获得了多年的多个面板。例如,2003 年有三篇新闻文章,所以我得到了 2003 年的三个手风琴面板,每个面板都有那年的三篇相应的新闻文章。 2004 年我得到了一个手风琴面板,因为 2004 年只有一篇文章。2006 年有六篇文章,所以我得到了六个面板,每个面板都包含六篇文章。

我需要怎么做才能只获得一个包含正确数量标题的面板?

这是我的 SQL:

   $newsposts = $wpdb->get_results("
SELECT YEAR(wp_posts.post_date) AS post_year, wp_posts.post_title, wp_posts.ID AS post_id 
FROM wp_posts LEFT JOIN wp_term_relationships ON 
(wp_posts.ID = wp_term_relationships.object_id) 
WHERE wp_term_relationships.term_taxonomy_id = 3 
AND wp_posts.post_status = 'publish' 
ORDER BY post_date
              ", OBJECT );

这是我的标记:

                  <?php foreach($newsposts as $year) : ?> <?php //print_r($year); ?>
                  <li class="accordion-item" data-accordion-item>
                    <a href="#" class="accordion-title"><?php echo $year->post_year; ?></a>

                     <div class="accordion-content" data-tab-content>
                       <?php foreach($newsposts as $post) : ?> <?php //print_r($post); ?>
                       <?php // Continue unless years match
                         if ( $post->post_year != $year->post_year ) continue; ?>
                           <a href="<?php the_permalink($post->post_id); ?>"><?php echo $post->post_title; ?></a><br/>
                       <?php endforeach; //$posts ?>
                     </div>

                   </li>
                 <?php endforeach; //$year ?>
                 </ul>

不知何故,我需要将第一个 foreach 限制为仅代表每年一次。我将不胜感激。

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    感谢这篇文章,我解决了这个问题并找到了答案:remove duplicates in foreach

    就我而言,这是我修改后的标记:

                <?php $yearposts = array(); ?>
                <?php foreach($newsposts as $year) : ?> <?php $postyear = $year->post_year; ?>
                <?php if(!in_array($postyear, $yearposts))  { ?>
                   <li class="accordion-item" data-accordion-item>
                    <a href="#" class="accordion-title"><?php echo $postyear; array_push($yearposts,$postyear); ?></a>
                       <div class="accordion-content" data-tab-content>
                         <ul class="accordlist">
                           <?php foreach($newsposts as $post) : ?> 
                           <?php // Continue unless years match
                             if ( $post->post_year != $year->post_year ) continue; ?>
                           <li><a class="newstitle" href="<?php the_permalink($post->post_id); ?>"><?php echo $post->post_title; ?></a></li>
                           <?php endforeach; //$posts ?>
                         </ul>
                       </div>
                     </li> 
                  <?php } // end in_array conditional ?>
                <?php endforeach; //$year ?>
               </ul>
    

    正如帖子所说,

    基本上我们只是使用一个额外的数组来存储打印的值。每次我们看到一个新值时,我们都会打印它并将其添加到数组中。

    我的版本被分成几部分以包围手风琴格式所需的元素。

    无论如何,我希望这对其他人有所帮助。我需要不同问题的答案来找到我的解决方案。现在也许有人会在这个地方找到所有东西。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      相关资源
      最近更新 更多