현재 위치: > 최신 기사 목록> array_column이 foreach보다 물체를 추출 할 때 더 효율적입니까?

array_column이 foreach보다 물체를 추출 할 때 더 효율적입니까?

M66 2025-05-11

PHP에는 배열을 처리하는 방법에는 여러 가지가 있습니다. Array_ColumnForeach 루프는 배열에서 특정 값 또는 객체 속성을 추출하는 두 가지 일반적인 방법입니다. 이 두 가지 방법은 종종 유사한 기능을 구현하는 데 사용되지만 성능이 다릅니다. 그렇다면 array_column이 foreach 보다 더 효율적입니까? 이 기사에서는 성능 차이와 해당 시나리오를 자세히 분석합니다.

1. array_columnforeach 의 기본 사용

1.1 array_column을 사용하여 객체 속성을 추출하십시오

Array_Column 함수는 PHP에 내장 된 매우 유용한 기능으로, 다차원 배열에서 지정된 열의 값을 추출하여 객체 배열에서 객체의 특정 특성을 추출하는 데 적합합니다. 예를 들어, 다음과 같은 객체 배열이 있다고 가정합니다.

 $objects = [
    (object) ['id' => 1, 'name' => 'Alice'],
    (object) ['id' => 2, 'name' => 'Bob'],
    (object) ['id' => 3, 'name' => 'Charlie']
];

// 사용 array_column 모두 추출하십시오 'name' 재산
$names = array_column($objects, 'name');
print_r($names);

출력은 다음과 같습니다.

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

Array_Column은 두 개의 매개 변수를 수신합니다. 첫 번째는 배열이고, 두 번째는 추출 해야하는 필드 이름입니다. 내부 구현은 특히 큰 배열을 처리 할 때 매우 효율적이므로 열 데이터를 더 빨리 추출 할 수 있습니다.

1.2 Foreach를 사용하여 객체 속성을 추출하기 위해 루프를 사용하십시오

또 다른 일반적인 방법은 Foreach 루프를 사용하여 배열을 수동으로 반복하고 각 객체의 속성 값을 추출하는 것입니다. 예를 들어:

 $objects = [
    (object) ['id' => 1, 'name' => 'Alice'],
    (object) ['id' => 2, 'name' => 'Bob'],
    (object) ['id' => 3, 'name' => 'Charlie']
];

$names = [];
foreach ($objects as $object) {
    $names[] = $object->name;
}
print_r($names);

출력 결과는 array_column 과 동일합니다.

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

Foreach 루프에는 각 객체의 속성 값을 추출하기 위해 수동 로직이 필요합니다. 코드는 일반적으로 더 길지만 유연성도 좋습니다.

2. 성능 차이

2.1 array_column 의 성능 장점

Array_Column 은 PHP에서 내부적으로 구현되고 C로 작성된 기능이므로 대규모 배열을 다룰 때 일반적으로 Foreach 보다 더 효율적입니다. array_column 이 특정 시나리오에 최적화 되었기 때문입니다. 하단 배열에서 지정된 열을 직접 추출하고 PHP 코드 레벨에서 루프 제어 및 배열 할당 작업을 피합니다.

2.2 Foreach 루프의 성능 단점

대조적으로, Foreach 루프는 배열의 수동 트래버스가 필요하고 하나씩 처리됩니다. 이 방법은 유연하지만 각 루프에는 배열 작업, 조건부 판단 등과 같은 여러 PHP 작업이 필요합니다. 따라서 매우 큰 배열을 처리 할 때 Foreach 루프는 Array_Column 만큼 잘 수행되지 않을 수 있습니다.

3. 특정 성능 비교

100000 개 객체 배열이 있다고 가정하면 Array_ColumnForeach를 사용하여 객체의 이름 속성을 추출하고 실행 시간을 테스트합니다.

 // 컨테이너를 만듭니다 10000 객체 배열
$objects = [];
for ($i = 0; $i < 10000; $i++) {
    $objects[] = (object) ['id' => $i, 'name' => 'Name ' . $i];
}

// 시험 array_column 성능
$startTime = microtime(true);
$names = array_column($objects, 'name');
$endTime = microtime(true);
echo "array_column execution time: " . ($endTime - $startTime) . " seconds\n";

// 시험 foreach 循环성능
$startTime = microtime(true);
$names = [];
foreach ($objects as $object) {
    $names[] = $object->name;
}
$endTime = microtime(true);
echo "foreach execution time: " . ($endTime - $startTime) . " seconds\n";

테스트에서 Array_Column은 일반적으로 배열이 더 클 때 Foreach 보다 짧게 실행됩니다.

4. 결론

PHP에서 Array_Column 함수는 일반적으로 대규모 배열에서 특정 열을 추출 해야하는 경우 Foreach 루프보다 더 효율적입니다. Array_Column은 PHP 내부 최적화를 사용하여 오버 헤드가 낮은 데이터를 신속하게 추출하는 반면, Foreach 루프에는 더 많은 PHP 작업이 필요하므로 성능이 저하됩니다.

그러나 Foreach Loops는 더 많은 사용자 정의 로직이 필요한 일부 시나리오에서, 특히 배열을 가로 질러 추가 작업을 수행해야 할 때 여전히 몇 가지 장점이 있습니다. 실제 개발에서는 배열에서 열을 추출하는 경우 먼저 Array_Column을 사용하는 것이 좋습니다.

이 기사 가이 두 가지 방법의 성능 차이를 더 잘 이해하고보다 적절한 선택을 더 잘 이해할 수 있기를 바랍니다.