현재 위치: > 최신 기사 목록> Array_Filter () 성능 분석 : 콜백 대 기본 동작

Array_Filter () 성능 분석 : 콜백 대 기본 동작

M66 2025-05-17

PHP에서 Array_Filter () 는 매우 일반적으로 사용되는 배열 처리 기능이며 주로 배열에서 요소를 필터링하는 데 사용됩니다. 이 함수는 유지되어야하는 요소를 정의하는 선택적 콜백 함수를 수신 할 수 있습니다. 콜백 함수가 제공되지 않으면 Array_Filter ()는 Array에서 False , NULL , 0 , 빈 문자열 및 빈 배열과 같은 "False 값"으로 배열에서 요소를 자동으로 제거합니다.

따라서 문제는 다음과 같습니다. 실제로 사용하면 기본 동작을 사용하여 Array_Filter ()를 사용하는 것과 사용자 정의 콜백 함수를 제공하는 것의 성능 차이는 무엇입니까? 어떤 방법이 더 효율적입니까?

이 기사는이 두 사용법의 실행 시간을 비교하고 테스트하여 성능 관점에서 심층 분석을 수행합니다.

1. 기본 문법 검토

 // 기본 동작:배열을 제거하십시오“가짜 가치”
$result = array_filter($array);

// 콜백 함수를 사용하십시오:보다 크게 유지됩니다 0 가치
$result = array_filter($array, function($value) {
    return $value > 0;
});

2. 테스트 코드 예제

우리는 많은 수의 요소가있는 배열을 구성하고 기본 동작 및 사용자 정의 콜백 기능을 사용하여 각각 필터링합니다.

 function testArrayFilterDefault($array) {
    $start = microtime(true);
    $result = array_filter($array);
    return microtime(true) - $start;
}

function testArrayFilterCallback($array) {
    $start = microtime(true);
    $result = array_filter($array, function($value) {
        return $value > 0;
    });
    return microtime(true) - $start;
}

// 테스트 배열을 구성하십시오,포함하다 100000 강요
$testArray = [];
for ($i = 0; $i < 100000; $i++) {
    $testArray[] = $i % 2 === 0 ? 0 : $i; // 절반은 0,절반은整数
}

// 테스트를 수행하십시오
$timeDefault = testArrayFilterDefault($testArray);
$timeCallback = testArrayFilterCallback($testArray);

echo "기본 동작执行时间:{$timeDefault} 두번째\n";
echo "콜백 함수 실행 시간:{$timeCallback} 두번째\n";

3. 성능 분석 결과

위의 스크립트를 실행하면 대부분의 경우 기본 동작이 더 빨리 실행된다는 것을 알게됩니다. 이유는 다음과 같습니다.

  • 기본 동작은 C 언어 계층에서 구현 된 내장 로직이며 실행 효율이 높습니다.

  • 콜백 함수를 사용하는 경우 PHP는 매번 사용자 정의 함수를 호출해야하며, 특히 많은 양의 데이터 일 때는 기능 호출 오버 헤드를 무시할 수 없습니다.

샘플 출력 (특정 기계에 따라 약간 다름) :

 기본 동작执行时间:0.012345 두번째
콜백 함수 실행 시간:0.035678 두번째

보시다시피, 기본 동작은 약 2 ~ 3 배 더 빠릅니다 .

4. 기본 동작이 항상 사용되어야합니까?

기본 동작이 더 좋지만 제한 사항이 있습니다. "거짓 값"만 제거 할 수 있습니다. 필터링 로직이 특정 범위의 값을 유지하거나 유형 확인 등을 유지하는 등 약간 복잡한 경우에도 여전히 콜백 기능이 필요합니다.

예를 들어:

 // 홀수 값을 유지하십시오
array_filter($array, function($v) {
    return $v % 2 !== 0;
});

이것은 분명히 기본 동작을 통해 달성 할 수 없습니다.

5. 실제 사례 : 사용자가 제출 한 양식 데이터 필터

 $userInput = [
    'name' => 'Alice',
    'email' => '',
    'age' => 0,
    'newsletter' => false,
];

$cleanedInput = array_filter($userInput); // 只保留非가짜 가치字段

// 산출 ['name' => 'Alice']

이 예에서는 채워지지 않은 필드 ( False , Empty Strings 등)를 제거하려면 기본 동작이 매우 적절합니다. 비어 있지 않은 스트링 필드 만 보존하려면 콜백을 사용해야합니다.

 $cleanedInput = array_filter($userInput, function($value) {
    return is_string($value) && trim($value) !== '';
});

6. 요약

사용 방법 성능 유연성 시나리오를 사용하십시오
기본 동작 ? 효율적인 ? 제한된 잘못된 값을 제거하십시오
콜백 함수를 사용하십시오 ? 약간 느립니다 ? 유연한 사용자 정의 필터링 로직

제안 : 잘못된 값을 제거하면 기본 동작을 사용하십시오. 더 복잡한 논리가 필요한 경우 콜백 함수를 사용하는 것은 불가피합니다.