0

だから私は複数の投稿があります。2 つのカテゴリ。著者によって作成された一部の投稿は、1 つのカテゴリにのみ含まれます。ただし、他の著者の投稿は両方のカテゴリに含まれる場合があります。重複を削除する必要があります。一度に投稿できる著者は 1 人だけです。だから私は、2つのより重要な(サービスポストではなくショップポスト)カテゴリをデフォルトにして、そのポストをリストするつもりでした.

しかし、そうする方法に戸惑っています。

データを取得して出力用に処理する方法は次のとおりです。

        $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);
            }
        }

すべてのデータを取得したら、アンティーク ショップとサービスを 1 つの配列にマージし、メンバーには独自のデータ配列を残します。

次に、ビジネス データ項目ごとに、ビジネス連絡先をチェックして、それがメンバー データと一致するかどうかを確認します。

$check配列値を返します。$check[0]= true/false $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]);
}

このシナリオで重複を削除するための有用なガイダンスはありますか?

4

1 に答える 1

0

check_contact()配列から各連絡先名を$serviceData取得し、それをすべての配列連絡先名と照合するという関数を追加しました$shopData。一致が見つかった場合は、true を返します

後で使用するために1 つの配列にマージされる前に、すべての真の一致が配列から削除されます。$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]);
            }
        }
于 2012-04-06T16:26:51.167 に答える