组合多个查询,ARRAY_UNIQUE不返回任何内容

时间:2018-09-22 作者:Best Dev Tutorials

我使用以下方法将多个查询组合为一个循环:

function order_by_date( $a, $b )
{
    return strcmp( $b->post_date, $a->post_date );
}
// get the posts for the first query
$q1_args = array(
    // args for the first query 
);
$q1_posts = get_posts( $q1_args );
// get the posts for the second query
$q2_args = array(
    // args for the second query
);
$q2_posts= get_posts( $q2_args );
// Merge the post arrays together, and sort by date using the order_by_date function
$final_posts = array_merge( $q1_posts, $q2_posts );

usort( $final_posts, \'order_by_date\' );
// Loop over the posts and use setup_postdata to format for template tag usage
foreach ( $final_posts as $key => $post ) {
    setup_postdata( $post ); 
    // Now we can use template tags as if this was in a normal WP loop
    the_title(\'<h2>\',\'</h2>\');
    the_content();
}
这很好,但当我尝试删除重复项时,我什么也没有得到(也没有错误):

// This is my code for trying to remove the duplicates
$final_posts = array_unique( array_merge( $q1_posts, $q2_posts ) );
对可能出现的问题有什么想法吗?

2 个回复
最合适的回答,由SO网友:Hans 整理而成

它将与SORT_REGULAR 标志:

array_unique( array_merge( $q1_posts, $q2_posts ), SORT_REGULAR );

SO网友:Best Dev Tutorials

由于迈克尔的回答,我使用了另一种方法:

在循环之前,创建一个数组:

$do_not_duplicate = array(); // set an array for catching duplicates
然后在循环内部,将post id添加到数组中,如果它已经在数组中,则跳过它:

if (in_array($postID, $do_not_duplicate)) {
 continue; // if its already been through it, dont display it
 }
$do_not_duplicate[] = $postID; // add the id to the array

结束

相关推荐

在Synology NAS上,index.php应该包含什么内容才能让外部访问WordPress正常工作?

请注意,这是我在这里的第一篇帖子。不确定此问题是否属于此网站的范围。如果没有,我很高兴它被关闭。我有一个Synology NAS,我想用Wordpress创建一个个人网站。我已经在noip注册了一个域名。com并在我的NAS上安装了Wordpress(以及所有其他必需的软件包)。noip正在将端口80(被我的isp阻止)重定向到端口81(未被阻止)。我已通过放置\'index.html\' 文件当我使用手机导航到URL时,我会看到“index”的呈现版本。html\'。然而,当我将其替换为“index”时