PHP的独特情况.在发送到循环内部函数之前,从数组中删除重复项


PHP Unique Situation. Remove Duplicates From Array Before Sent to Function Inside Loop

所以我有多个帖子。两类。作者的一些帖子只属于一类。但其他作者的帖子可能同时属于这两类。我需要删除重复项。我一次只能有一个作者帖子。因此,我将默认使用这两个类别中更重要的类别(商店帖子和服务帖子),并列出该帖子。

但我不知道该怎么做。

以下是我如何获得数据并对其进行处理以输出:

        $allPosts = get_post_type_data('archive', 'all');   
        for($i = 0; $i < count($allPosts); $i++){
            if($allPosts[$i]['post_type'] == 'antique-shops'){
                $shopData[] = $allPosts[$i];
            }
            if($allPosts[$i]['post_type'] == 'member-dealers'){
                $memberData[] = $allPosts[$i];
            }
            if($allPosts[$i]['post_type'] == 'services'){
                $serviceData[] = $allPosts[$i];
            }
        }
        $business = array_merge((array)$shopData, (array)$serviceData);
        function cmp($a, $b){
            return strcmp(rewrite_name($a['custom']['wpcf-business-contact'][0]), rewrite_name($b['custom']['wpcf-business-contact'][0]));
        }
        usort($business, "cmp");
        for($i = 0; $i < count($business); $i++){
            if($i % 2){
                $className = 'odd';
            } else{
                $className = 'even';
            }
            $check = check_member($business[$i]['custom']['wpcf-business-contact'][0], $memberData);
            if($check[0] == 'true'){
                echo display_listing('member-dealers', $check[1], $business[$i], $className);
            }
        }

因此,在获得所有数据后,我将古董店和服务合并在一个数组中,并让成员拥有自己的数据数组。

然后,对于每个业务数据项,我检查业务联系人,看看它是否与成员数据匹配。

$check返回数组值。$check[0]=真/假$check[1]=与特定成员有关的数据数组。

display_listing()只获取每个业务/成员输入的数据并输出

我想我需要在根据会员数据检查业务或服务之前检查重复项。

每个古董店或服务都有一个业务联系人:$business[$i]['custom']['wpcf-business-contact'][0],用于检查该业务联系人是否作为会员存在。

因此,如果$business[$i]['custom']['wpcf-business-contact'][0]同时属于古董店和服务,则从阵列中删除与该人有关的服务数据。

我试过这个(在循环内):

if(($key = array_search($business[$i]['custom']['wpcf-business-contact'][0], $business)) !== false){
    unset($business[$key]);
}

关于在这种情况下删除重复项,有什么有用的指导吗?

我添加了一个名为check_contact()的函数,它从$serviceData数组中获取每个联系人名称,并将其与所有$shopData数组联系人名称进行检查。如果找到匹配项,则返回true

所有真匹配在合并到一个$business阵列中以供以后使用之前都会从阵列中删除。

我在$shopData$serviceData合并之前放置了以下代码:

        function check_contact($name, $data){
            for($i = 0; $i < count($data); $i++){
                if($name == $data[$i]['custom']['wpcf-business-contact'][0]){
                    $return = 'true';
                }
            }
            return $return;
        }
        for($i = 0; $i < count($serviceData); $i++){
            $contact = check_contact($serviceData[$i]['custom']['wpcf-business-contact'][0], $shopData);
            if($contact == 'true'){
                unset($serviceData[$i]);
            }
        }