매일 PHP 개발에서는 종종 특정 "화이트리스트 키"또는 "블랙리스트 키"를 기반으로 배열을 필터링해야합니다. PHP가 제공하는 Array_flip () 및 Array_intersect_key () 함수는이 요구 사항을 매우 효율적으로 달성 할 수 있습니다. 이 기사는 특정 코드 예제를 사용 하여이 두 기능을 사용하여 배열 필터링 작업을 완료하는 방법을 소개합니다.
이 기능은 키와 값을 배열에서 바꾸는 데 사용됩니다.
array_flip(array $array): array
입력 : 배열.
출력 : 키 값 쌍의 배열이 뒤집힌 후 배열 (참고 : 원래 배열의 값은 고유해야하며 키의 스칼라 값으로 사용할 수 있어야합니다).
이 기능은 모든 키가 다른 어레이에 존재하는 배열의 요소를 반환하는 데 사용됩니다.
array_intersect_key(array $array, array ...$arrays): array
입력 : 둘 이상의 배열.
출력 : 첫 번째 배열의 모든 후속 배열에 동시에 나타나는 요소 만.
사용자 양식에서 다음 데이터를 수신한다고 가정합니다.
$userInput = [
'username' => 'john_doe',
'password' => '123456',
'email' => 'john@example.com',
'token' => 'abcd1234', // 불법 분야
];
우리는 세 개의 필드 '사용자 이름' , '비밀번호' 및 '이메일' 만 유지하고 다른 하나는 필터링해야합니다.
$allowedKeys = ['username', 'password', 'email'];
// 키 이름으로 키를 변경할 수 있습니다
$allowedKeysFlipped = array_flip($allowedKeys);
// 교차로를 얻으십시오,동일한 키로 필드를 유지하십시오
$filteredInput = array_intersect_key($userInput, $allowedKeysFlipped);
print_r($filteredInput);
Array
(
[username] => john_doe
[password] => 123456
[email] => john@example.com
)
이런 식으로, 우리는 어레이를 유연하고 안전하게 필터링하여 불법 필드가 계속 처리되거나 데이터베이스에 기록되는 것을 피할 수 있습니다.
API 인터페이스를 개발하고 다음 URL 매개 변수를 수신한다고 가정합니다.
https://m66.net/api/user/update?username=jane&password=78910&is_admin=1
클라이언트가 마음대로 IS_ADMIN 과 같은 민감한 필드를 수정하고 사용자 이름 과 비밀번호 만 업데이트하기를 원하지 않습니다.
당신은 이것을 할 수 있습니다 :
$input = $_GET;
$allowed = ['username', 'password'];
$safeInput = array_intersect_key($input, array_flip($allowed));
// 지금 $safeInput 허용 된 필드 만 포함합니다
이 방법은 API 매개 변수의 화이트리스트 메커니즘을 쉽게 구현하고 보안을 향상시킬 수 있습니다.
Array_flip () 및 Array_intersect_key ()를 결합하여 배열의 주요 필터링 작업을 매우 편리하게 구현할 수 있습니다. 이 접근법은 코드와 고성능에서 간결 할뿐만 아니라 유지 관리가 쉽습니다. 양식 처리, API 매개 변수 필터링 및 기타 시나리오에 적합합니다.
실제 개발에서는이 논리를 함수로 캡슐화하는 것이 좋습니다.
function filter_array_keys(array $data, array $allowedKeys): array {
return array_intersect_key($data, array_flip($allowedKeys));
}
이렇게하면 코드가 더 모듈 식적이고 읽을 수 있습니다.