array_intersect_ukey(array $array1, array $array2, callable $key_compare_func): array
この関数は、$ array2にも存在する$ array1のすべてのキーを含む配列を返します。キーの比較方法は、 key_compare_funcによって決定されます。
array_keys(array $array, mixed $search_value = null, bool $strict = false): array
array_keysは、配列内のすべてのキーを返します。または、指定された値の場合、値に対応するキーを返します。
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」 、 「ユーザー名」 、 「電子メール」でコンテンツのみを保持し、他のフィールドを破棄したいと考えています。
$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]
)
array_flip($ logfields)キー名の配列をフリップして、キー名がフィールド名と値がインデックス付けされている配列である必要があります。
STRCMPを比較関数として使用して、標準文字列比較を実装します。
最終結果は、$ apidataキーが$ logfieldsに存在するフィールドのセットです。
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_flipとarray_intersect_ukeyを介してデータをフィルタリングします。
この方法により、値のいくつかのロジックに従って、対応するキーを配列内のキーを保存できるため、非常に柔軟な構造化データ処理を実行できます。