在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 ) ) 

【问题讨论】:

你是说循环完成后的&lt;pre&gt;&lt;?php print_r($school_item); ?&gt;&lt;/pre&gt; 给出了 3 个 WP_Post 对象的数组吗?因为这不太可能,除非 school_item 本身就是一个数组 是的,没错。也许这是因为“学校”帖子类型的请求是在“课程”分类页面上完成的。我有“课程”(课程类别)的分类法。他们首先将所有课程分配到此类别,然后需要“学校”。 请在$school_items = get_field('shkola'); 行之后给我看一个print_r($school_items);。谢谢 感谢您的帮助)。它看起来像这样:Array ([0] =&gt; WP_Post Object ( [ID] =&gt; 37 )) Array ([0] =&gt; WP_Post Object ( [ID] =&gt; 37 )) Array ([0] =&gt; WP_Post Object ( [ID] =&gt; 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循环中从数组中删除重复的内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中从数组中删除重复元素

从数组中删除重复项时出现超出范围异常

本地数组在循环内重复! C++

forEach函数中的while循环[重复]

C# - 在while循环中从字典中删除项目

在bash'while read'循环中设置的变量在它之后未设置[重复]