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) 는 키 이름이 필드 이름이고 값이 색인화 된 배열이어야하는 키 이름의 배열을 뒤집어 Array_intersect_ukey 의 비교 개체로 사용할 수 있습니다.
표준 문자열 비교를 구현하기 위해 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를 통해 데이터를 걸러냅니다.
이 방법을 사용하면 값의 일부 논리 에 따라 배열의 해당 키를 보존 할 수 있으므로 매우 유연한 구조화 된 데이터 처리를 수행 할 수 있습니다.