現在の位置: ホーム> 最新記事一覧> array_intersect_ukeyおよびarray_keysで使用される例

array_intersect_ukeyおよびarray_keysで使用される例

gitbox 2025-05-29

1。関数の紹介

array_intersect_ukey

 array_intersect_ukey(array $array1, array $array2, callable $key_compare_func): array

この関数は、$ array2にも存在する$ array1のすべてのキーを含む配列を返します。キーの比較方法は、 key_compare_funcによって決定されます。

array_keys

 array_keys(array $array, mixed $search_value = null, bool $strict = false): array

array_keysは、配列内のすべてのキーを返します。または、指定された値の場合、値に対応するキーを返します。


2。実際のケース分析

APIのセットで返されたデータを処理するとき、ロギングやフロントエンドへの提示など、さらに処理するために、複数の返品フィールドから指定されたフィールドを除外する必要があると想像してください。典型的なシナリオは次のとおりです。

サンプルデータ:

 $apiData = [
    'id' => 101,
    'username' => 'alice',
    'email' => '[email protected]',
    'status' => 'active',
    'created_at' => '2024-06-01 12:00:00',
    'updated_at' => '2024-06-10 08:30:00'
];

$logFields = ['id', 'username', 'email'];

$ Apidataキー「ID」「ユーザー名」「電子メール」でコンテンツのみを保持し、他のフィールドを破棄したいと考えています。


3. array_keysとarray_intersect_ukeyを使用して、フィルタリングを実現します

実装コード:

 $allowedKeys = array_flip($logFields);

$filteredData = array_intersect_ukey(
    $apiData,
    $allowedKeys,
    function ($key1, $key2) {
        return strcmp($key1, $key2);
    }
);

出力結果:

 Array
(
    [id] => 101
    [username] => alice
    [email] => [email protected]
)

説明:

  1. array_flip($ logfields)キー名の配列をフリップして、キー名がフィールド名と値がインデックス付けされている配列である必要があります。

  2. STRCMPを比較関数として使用して、標準文字列比較を実装します。

  3. 最終結果は、$ apidataキーが$ logfieldsに存在するフィールドのセットです。


4. URLデータ処理をさらに組み合わせます

URLを使用したユーザー構成データのセットを扱っているとしたら、ホワイトリストに登録されたURLドメイン名を含む部分のみを保持する必要があります。

サンプルコード:

 $userSettings = [
    'homepage' => 'https://gitbox.net/home',
    'avatar' => 'https://cdn.gitbox.net/avatar.jpg',
    'backup_site' => 'https://example.com/backup',
    'profile' => 'https://gitbox.net/user/profile'
];

$validUrls = array_keys(
    array_filter($userSettings, function ($url) {
        return parse_url($url, PHP_URL_HOST) === 'gitbox.net';
    })
);

$validKeys = array_flip($validUrls);

$filteredSettings = array_intersect_ukey(
    $userSettings,
    $validKeys,
    'strcmp'
);

print_r($filteredSettings);

出力結果:

 Array
(
    [homepage] => https://gitbox.net/home
    [profile] => https://gitbox.net/user/profile
)

コアロジック説明:

  • 最初に、 array_filterを介して値のURLのメインドメイン名をフィルタリングします。

  • array_keysは、要件を満たすキー名を抽出します。

  • 次に、 array_fliparray_intersect_ukeyを介してデータをフィルタリングします。

この方法により、値のいくつかのロジックに従って、対応するキーを配列内のキーを保存できるため、非常に柔軟な構造化データ処理を実行できます。