Php 如何计算阵列的重复数?

Php 如何计算阵列的重复数?,php,wordpress,Php,Wordpress,我正在使用Wordpress并查询CPT。以下是单个输出示例: Array ( [0] => WP_Post Object ( [ID] => 1400 [post_author] => 1 [post_date] => 2017-10-20 14:43:48 [post_date_gmt] => 2017-10-20 13:43:48

我正在使用Wordpress并查询CPT。以下是单个输出示例:

Array
(
    [0] => WP_Post Object
        (
            [ID] => 1400
            [post_author] => 1
            [post_date] => 2017-10-20 14:43:48
            [post_date_gmt] => 2017-10-20 13:43:48
            [post_content] => content
            [post_title] => test-case
            [post_excerpt] => dsfsdfsd
            [post_status] => publish
            [comment_status] => closed
            [ping_status] => closed
            [post_password] => 
            [post_name] => test-case
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2017-10-20 15:02:43
            [post_modified_gmt] => 2017-10-20 14:02:43
            [post_content_filtered] => 
            [post_parent] => 0
            [guid] => http://example.com/site/?post_type=bulletin&p=1400
            [menu_order] => 0
            [post_type] => bulletin
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )
)
我有很多相同标题的重复文章,但是他们使用了一个UID,这个UID包含在post_meta中,在这个例子中不显示,因为它是不相关的

我使用这段代码循环浏览所有文章,找到重复的文章,并创建一个新数组,其中包含重复文章的单个实例

foreach ($query->posts as $post) {

  if (!array_key_exists($post->bid, $new_array)) {

    $new_array[$post->bid] = $post;  

  }

}

问题:如何使用上面的循环额外计算每篇文章的副本数?

如果您只需要计算副本数,您可以这样做:

$duplicateCounts = array_count_values(array_map(function ($post) {
     return $post->post_title;
},$query->posts);

foreach ($query->posts as $post) {
   if (!array_key_exists($post->bid, $new_array)) {    
       $new_array[$post->bid] = $post;       
       $new_array[$post->bid]->duplicate_count = $duplicateCounts[$post->post_title];
    }    
}
它所做的是:

它将$query->posts结果数组转换为仅包含post_title值的数组。这是通过使用它来完成的,在本例中,它将根据函数的结果更改每个数组项的结果,以获取post_标题,并将结果返回到新数组中。 计算新数组中每个标题的实例数,这是通过使用来完成的,它将根据手册返回一个数组,使用数组中的值作为键,使用它们在数组中的频率作为值。。例如,如果您在原始数组中有12次测试用例,那么在频率数组中会有一个类似于[test case=>12]的条目。
完成所有这些之后,只需检查频率数组中找到标题的次数。

您只需在现有代码中加入一个计数器即可。这似乎是一个有点奇怪的问题,但我们每个人都有“以林换树”的时刻,所以你来吧:

$duplicates = 0;
foreach ($query->posts as $post) {

    if (!array_key_exists($post->bid, $new_array)) {

        $new_array[$post->bid] = $post;  

    }
    else {
        $duplicates++;
    }

}

$i=0;还有一个带$i++@Anessban可以随意发布一个代码示例,因此判断一篇文章是否重复的唯一标准是文章标题?@apokryfos Yes。每增加一篇新文章,另外7-20篇左右的重复文章也会被添加。。。只是对于重复的,它们有一个不同的地理“位置”,与元数据中包含的帖子位置相关联。标题总是一样的,所以可以使用post_标题。为什么这被否决了??????人们会很快地对你的帖子产生负面影响而不做任何解释。这将计算所有重复的帖子,我一直在为每个帖子寻找重复的帖子。所以要清楚,作为一个例子,会有4个Foo帖子,4个Bar帖子,3个Baz帖子,相同的标题,不同的内容。用我目前的代码,我可以按标题获得每篇文章的1倍,但我需要每个文章有多少个副本。好的,然后你需要为每个标题创建一个数组,并在每次重复时添加到其中。重复的标题总是在另一个标题出现之前一个接一个地出现吗?太好了,这就成功了。请您添加解释性的注释,说明这段代码是如何工作的,这样我就可以了解这段代码,而不仅仅是复制粘贴了吗?@proeviz添加了更多信息。希望它有用。