현재 위치: > 최신 기사 목록> array_diff_ukey ()를 기반으로 주요 화이트리스트 로직 구현

array_diff_ukey ()를 기반으로 주요 화이트리스트 로직 구현

M66 2025-05-14

매일 개발에서, 우리는 종종 "키 화이트리스트"로직이라고하는 연관 배열에서 지정된 "키"만 유지 해야하는 경우가 종종 있습니다. 이 목표를 달성하기 위해 array_intersect_key ()를 사용할 수 있지만 오늘날 우리는 약간 "인기가없는"하지만 매우 유연한 방법을 소개합니다. Array_diff_ukey ()를 사용하여 주요 화이트리스트를 구현하십시오.

array_diff_ukey () 란 무엇입니까?

Array_diff_ukey () 는 PHP가 제공하는 함수로 둘 이상의 배열의 키 이름을 비교하고 콜백 함수를 사용하여 키 이름이 동일인지 확인합니다. 이 함수는 첫 번째 배열에 존재하지만 다른 배열에는 존재하지 않는 키 값 쌍을 반환합니다.

구문은 다음과 같습니다.

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

구현 아이디어

Array_diff_ukey () 는 키를 "제외"하는 데 사용되지만, 화이트리스트 키를 약간 "짧은"상태로 "유지"하는 데 사용할 수 있습니다. 원칙은 다음과 같습니다.

  1. 화이트리스트 키가 포함 된 배열을 빌드합니다 (널 값의 배열 일 수 있음).

  2. 화이트리스트 어레이의 키만 유지되도록 사용자 정의 키 비교 함수를 통한 로직 역전;

  3. Array_diff_ukey ()를 사용하여 원래 배열에서 화이트리스트에 있지 않은 키를 "제거"하십시오.

샘플 코드

다음은 양식을 제출하는 데이터 배열 $ 데이터가 있다고 가정하고 Keys '사용자 이름''이메일'을 보존하려고합니다.

 <?php

// 시뮬레이션 된 사용자 제출 데이터
$data = [
    'username' => 'john_doe',
    'email' => 'john@example.com',
    'password' => '123456',
    'redirect' => 'https://m66.net/welcome'
];

// 화이트리스트 키를 정의하십시오
$whitelistKeys = [
    'username' => true,
    'email' => true,
];

// array_diff_ukey 역 처리 로직
$filteredData = array_diff_ukey($data, $whitelistKeys, function ($key1, $key2) {
    // 화이트리스트에 키가 유지되었습니다
    return $key1 === $key2 ? 0 : -1;
});

// 원래 배열에서 제거하십시오“화이트리스트에 있지 않습니다”열쇠
$cleanData = array_diff_key($data, $filteredData);

// 출력 결과
print_r($cleanData);

/*
출력 결과:
Array
(
    [username] => john_doe
    [email] => john@example.com
)
*/
?>

우위 분석

array_diff_ukey ()를 사용하여 주요 화이트리스트를 구현하는 논리는 약간 구불 구불하지만 다음을 제공합니다.

  • 더 강력한 유연성 : 케이스 무시, 처리 접두사 등과 같은 복잡한 키 매칭 로직을 구현할 수 있습니다.

  • 높은 가독성 (주석과 함께 사용될 때);

  • 부작용 없음 : 원래 배열은 수정되지 않습니다.

응용 프로그램 시나리오

이 쓰기를 다음의 도구 기능으로 캡슐화 할 수 있습니다.

  • 필터 사용자가 제출 한 데이터;

  • 시스템 구성의 보안 필드를 보호합니다.

  • 인터페이스 응답 구조의 출력 내용을 제어합니다.

요약

PHP는 배열을 조작하는 다양한 방법을 제공하지만 array_diff_ukey () 와 같은 기능을 사용하는 유연성을 통해 공통 수요 로직을 여러 가지 방식으로 구현할 수 있습니다. 보다 강력하고 재사용 가능한 배열 필터를 만들려면이 아이디어를 시도 할 수도 있습니다!