현재 위치: > 최신 기사 목록> 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) 는 키 이름이 필드 이름이고 값이 색인화 된 배열이어야하는 키 이름의 배열을 뒤집어 Array_intersect_ukey 의 비교 개체로 사용할 수 있습니다.

  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를 통해 데이터를 걸러냅니다.

이 방법을 사용하면 값의 일부 논리 에 따라 배열의 해당 키를 보존 할 수 있으므로 매우 유연한 구조화 된 데이터 처리를 수행 할 수 있습니다.