일일 개발에서 데이터 필터링은 특히 사용자 입력을 처리 할 때 데이터베이스를 처리하거나 외부 API 데이터를 처리 할 때 다음과 같은 데이터를 "제외"해야합니다. 블랙리스트 사용자, 자격이없는 제품 또는 처리 된 데이터 세트에서 처리 된 레코드를 "제외"해야합니다. 현재 두 개의 PHP 네이티브 기능 array_diff () 와 in_array ()가 편리합니다.
Array_Diff ()는 배열 값을 비교하는 데 사용되며 첫 번째 배열에서는 값을 반환하지만 다른 배열에서는 그렇지 않습니다. 예를 들어:
$allUsers = ['alice', 'bob', 'charlie', 'david'];
$blacklist = ['bob', 'david'];
$filteredUsers = array_diff($allUsers, $blacklist);
print_r($filteredUsers);
// 산출: ['alice', 'charlie']
이 예에서 Bob 과 David는 블랙리스트 멤버이며 Array_Diff ()를 통해 원래 데이터에서 제외합니다.
in_array ()는 값이 배열에 존재하는지 여부를 결정하는 데 사용됩니다. 이 기능은 단일 판단 또는 논리적 조건으로 매우 유용합니다.
예를 들어, 데이터를 통과 할 때 특정 항목을 조건부로 제외 해야하는 경우 다음과 같이 쓸 수 있습니다.
$exclusions = ['spam', 'banned'];
$itemType = 'spam';
if (!in_array($itemType, $exclusions)) {
echo "이 항목을 처리 할 수 있습니다";
} else {
echo "이 항목은 제외되었습니다";
}
이제 더 실용적인 예, Array_diff () 및 in_array () 를 결합하여 다중 조건 제외를 달성하고 데이터 처리 효율성을 향상시키는 방법을 살펴 보겠습니다.
기사 데이터 세트가 있고 필드에 저자, 상태 및 태그가 포함되어 있다고 가정합니다.
협박 저자를 제외하십시오
초안 상태가있는 기사를 제외하십시오
태그에 "민감한"키워드가있는 기사를 제외하십시오
우리는 이것을 할 수 있습니다 :
$articles = [
['title' => '기사1', 'author' => 'tom', 'status' => 'published', 'tags' => ['php', 'web']],
['title' => '기사2', 'author' => 'jack', 'status' => 'draft', 'tags' => ['php', '예민한']],
['title' => '기사3', 'author' => 'lucy', 'status' => 'published', 'tags' => ['laravel']],
['title' => '기사4', 'author' => 'bob', 'status' => 'published', 'tags' => ['예민한']],
];
$blacklistedAuthors = ['bob', 'jack'];
$excludedStatus = ['draft'];
$sensitiveTags = ['예민한'];
$filtered = array_filter($articles, function ($article) use ($blacklistedAuthors, $excludedStatus, $sensitiveTags) {
// 블랙리스트 저자 제외
if (in_array($article['author'], $blacklistedAuthors)) {
return false;
}
// 특정 상태를 제외합니다
if (in_array($article['status'], $excludedStatus)) {
return false;
}
// 排除含有예민한标签的기사
foreach ($article['tags'] as $tag) {
if (in_array($tag, $sensitiveTags)) {
return false;
}
}
return true;
});
print_r($filtered);
출력은 다음과 같습니다.
Array
(
[0] => Array
(
[title] => 기사1
[author] => tom
[status] => published
[tags] => Array
(
[0] => php
[1] => web
)
)
[2] => Array
(
[title] => 기사3
[author] => lucy
[status] => published
[tags] => Array
(
[0] => laravel
)
)
)
데이터 볼륨이 크면 Array_Diff ()를 사용하여 불필요한 컨텐츠를 한 번에 필터링하고 루프 내에서 in_array () 로 자주 호출하지 마십시오.
제외의 배열 구조를 해시 테이블 (즉, 키 값 쌍 양식)으로 조정하면 검색 속도가 더욱 향상 될 수 있습니다.
예를 들어:
$blacklistedAuthors = array_flip(['bob', 'jack']);
if (isset($blacklistedAuthors[$article['author']])) {
return false;
}
isset () 의 성능은 일반적으로 in_array () , 특히 높은 동시성 시나리오에서보다 낫습니다.
Array_diff () 와 in_array ()를 합리적으로 결합하여 여러 조건에서 데이터 제외 로직을 빠르게 구현하여 프로그램의 가독성 및 실행 효율을 향상시킬 수 있습니다. 실제 개발에서 합리적으로 데이터 구조 및 논리적 판단은 코드를보다 효율적이고 안정적으로 만들 것입니다.