在while循环中从数组中删除重复的内容[重复]
Posted
技术标签:
【中文标题】在while循环中从数组中删除重复的内容[重复]【英文标题】:Strip out duplicate content from an array in while loop [duplicate] 【发布时间】:2021-12-06 10:32:26 【问题描述】:我正在寻找一种从数组中去除重复内容的方法。问题是这些本质上都是从while循环获得的不同数组
我有 2 个自定义帖子类型“学校”和“课程”,它们之间有一个 ACF 字段来表示彼此之间的关系。在课程分类页面上,我展示了当前分类的课程,以及与该分类的课程相关的学校。因此,学校的重复次数与与该学校相关的课程一样多。
所以,这是
<?php
while (have_posts()) :
the_post();
$school_items = get_field('shkola');
foreach ($school_items as $school_item) :
endforeach; ?>
<pre><?php print_r($school_item); ?></pre>
<?php endwhile; ?>
给我包含重复的记录
WP_Post Object ([ID] => 37)
WP_Post Object ([ID] => 37)
WP_Post Object ([ID] => 32)
我尝试了array_unique
,但我无法正确使用它,它仍然返回重复。
这和https://support.advancedcustomfields.com/forums/topic/strip-out-duplicate-content-from-an-array/这里的情况非常相似,但是那里描述的方法对我也不起作用。
我将不胜感激在这件事上的任何帮助)
更新
来自print_r($school_items);
的输出
Array ([0] => WP_Post Object ( [ID] => 37 ) )
Array ([0] => WP_Post Object ( [ID] => 37 ) )
Array ([0] => WP_Post Object ( [ID] => 32 ) )
【问题讨论】:
你是说循环完成后的<pre><?php print_r($school_item); ?></pre>
给出了 3 个 WP_Post 对象的数组吗?因为这不太可能,除非 school_item 本身就是一个数组
是的,没错。也许这是因为“学校”帖子类型的请求是在“课程”分类页面上完成的。我有“课程”(课程类别)的分类法。他们首先将所有课程分配到此类别,然后需要“学校”。
请在$school_items = get_field('shkola');
行之后给我看一个print_r($school_items);
。谢谢
感谢您的帮助)。它看起来像这样:Array ([0] => WP_Post Object ( [ID] => 37 )) Array ([0] => WP_Post Object ( [ID] => 37 )) Array ([0] => WP_Post Object ( [ID] => 32 ))
好的,我给你的代码应该只打印一次标题并忽略重复项,但是它不会从$school_items
数组中删除项目。您是否要实际从该数组中删除重复的 ID 并且不打印重复的标题
【参考方案1】:
你可以用一个简单的,我在测试之前见过这个
<?php
$school_items = get_field('shkola');
if ($school_items) :
$seenIt = [];
foreach ($school_items as $school_item) :
if ( !in_array($school_item->ID, $seenIt) ) :
$title = get_the_title($school_item->ID);
?>
<div class="title">
<h2><?php echo esc_html($title); ?></h2>
</div>
<?php
$seenIt[] = $school_item->ID;
endif;
endforeach;
endif;
?>
好的,所以如果你想从原始数组中删除重复项,也可以这样做
$school_items = get_field('shkola');
if ($school_items) :
$seenIt = [];
foreach ($school_items as $key => $school_item) :
if ( in_array($school_item->ID, $seenIt) ) :
unset($school_items[$key]);
else:
$title = get_the_title($school_item->ID);
?>
<div class="title">
<h2><?php echo esc_html($title); ?></h2>
</div>
<?php
$seenIt[] = $school_item->ID;
endif;
endforeach;
endif;
【讨论】:
不幸的是,它不起作用。您的答案与我帖子中链接的答案非常相似,但此解决方案无济于事( 它在什么方面不起作用,这不是一个很有帮助的描述 只是没有变化。记录不断重复。 您确定要逐行复制代码吗? 是的,我只是照你写的那样复制,输出3个条目,其中2个与id 37相同。以上是关于在while循环中从数组中删除重复的内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章