"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP 연관 배열에서 검색하는 방법 – 빠른 팁

PHP 연관 배열에서 검색하는 방법 – 빠른 팁

2024-11-07에 게시됨
검색:742

연관 배열은 개발자가 키-값 쌍을 저장할 수 있도록 하는 PHP의 기본 데이터 구조입니다. 이는 다목적이며 일반적으로 구조화된 데이터를 나타내는 데 사용됩니다. PHP 연관 배열 내에서 특정 요소를 검색하는 것은 일반적인 작업입니다. 그러나 PHP에서 사용할 수 있는 대부분의 기본 함수는 간단한 배열에서 잘 작동합니다.

이러한 이유로 우리는 연관 배열에서 동일한 작업을 수행할 수 있는 함수 조합을 찾아야 하는 경우가 많습니다. 메모리 부족 오류 없이 가능할까요?.

이 튜토리얼에서는 PHP 연관 배열에서 값을 검색하는 다양한 방법과 기법을 살펴보겠습니다.

연관 배열에서 키 검색

array_key_exists() 함수는 연관 배열에 특정 키가 존재하는지 확인합니다. 키가 발견되면 true를 반환하고 그렇지 않으면 false를 반환합니다.

$fruits = [
    'apple' => 'red',
    'banana' => 'yellow',
];

if (array_key_exists('banana', $fruits)) {
    echo "The key 'banana' exists in the array.";
} else {
    echo "The key 'banana' does not exist in the array.";
}

연관 배열의 값으로 검색하기

array_search() 및 in_array() 사용

array_search() 함수는 연관 배열에서 값을 검색하고, 발견되면 해당 키를 반환하고, 발견되지 않으면 false를 반환합니다.

$colors = [
    'apple' => 'red',
    'banana' => 'yellow',
];

echo array_search('yellow', $colors); // Print "banana"

더 복잡한 데이터가 포함된 배열을 값으로 사용할 수도 있습니다.

$colors = [
    'apple' => ['red'],
    'banana' => 'yellow',
];

echo array_search(['red'], $colors); // Print "apple"

이 경우 엄격한 비교 모드를 사용하는 것이 좋습니다. array_search:
에 세 번째 부울 매개변수를 전달하도록 요청할 수 있습니다.

echo array_search(['red'], $colors, true);

array_search()와 유사한 것은 항목의 키 대신 부울 플래그만 반환하는 in_array 함수입니다.

/*
 * It also supports strict mode comparison, useful for working with structured data as a value.
 */
echo in_array(['red'], $colors, true); // Return "true"

foreach 루프 사용

foreach 루프를 사용하여 연관 배열을 반복하고 특정 값을 수동으로 검색할 수 있습니다. 루프가 배열의 동일한 범위에 있으므로 루프의 모든 데이터에 액세스할 수 있으므로 복잡한 비교나 조작이 필요할 때 유용합니다.

$targetValue = 'yellow';

foreach ($colors as $key => $value) {
    if ($value === $targetValue) {
        echo "The value {$targetValue} is associated with the key {$key}.";
        break; // Optional: Stop searching after finding the occurrence.
    }
}

array_filter() 사용하기

array_filter() 함수를 사용하면 배열을 필터링하고 테스트 콜백을 통과한 요소만 반환할 수 있습니다.

$colors = [
    'apple' => 'red',
    'banana' => 'yellow',
];

$filteredArray = array_filter($colors, function ($value) {
    return $value === 'red';
});

/*
 * It contains just one element: ['apple' => 'red']
 * ‘banana’ was filtered out.
 */
var_dump($filteredArray);

PHP 배열 함수와 foreach 간의 성능 벤치마크

성능이 우려 사항 중 하나라면 기사의 이 섹션이 확실히 흥미로울 것입니다.

array_map과 foreach 루프를 사용하여 200,000개의 항목 배열에 대해 간단한 작업을 수행하는 스크립트를 만들었습니다. Inspector 패키지를 사용하여 두 문의 성능을 추적했습니다. 이 샌드박스에 있는 코드를 가지고 놀 수 있습니다: https://phpsandbox.io/e/x/5titt

$data = range(1, 200000);

$inspector->addSegment(function () use ($data) {
    array_map(fn($item) => $item * 3, $data);
}, 'array_map');

$data = range(1, 200000);

$inspector->addSegment(function () use ($data) {
    foreach ($data as $item) {
        $data[$item] = $item * 3;
    }
}, 'foreach');

수십 번의 실행을 통해 foreach가 array_map보다 일관되게 약 10% 더 나은 것으로 나타났습니다.

How to Search in a PHP Associative Array – Fast tips

그러나 이 결과는 상황에 따라 많이 달라질 수 있습니다. 위에 링크된 샌드박스에서 코드 조각을 실행하면 foreach가 array_map보다 10배 더 효율적이라는 것을 알 수 있습니다. 로컬 환경에서 스크립트를 복사하여 직접 벤치마크를 만들 수 있습니다.

어쨌든 foreach가 일반적으로 array_map보다 더 효율적인 이유는 콜백 사용을 암시하지 않기 때문입니다. 동일한 범위에서 배열을 직접 사용하는 것보다 함수를 호출하는 데 더 많은 오버헤드가 있습니다. 이러한 이유로 array_map은 각 반복마다 조금 더 많은 시간을 낭비합니다. 하지만 더 큰 데이터세트에만 표시됩니다. 배열이 작을수록 간격은 더 미미해집니다.

Inspector를 처음 사용하시나요? 무료로 애플리케이션을 모니터링하세요

Inspector는 소프트웨어 개발자를 위해 특별히 설계된 코드 실행 모니터링 도구입니다. 서버 수준에서 아무것도 설치할 필요가 없습니다. composer 패키지만 설치하면 바로 사용할 수 있습니다.

다른 복잡한 올인원 플랫폼과 달리 Inspector는 매우 쉽고 PHP 친화적입니다. Laravel 또는 Symfony 패키지를 사용해 볼 수 있습니다.

효과적인 자동화, 심층적인 통찰력, 경고 및 알림을 메시징 환경으로 전달하는 기능을 찾고 있다면 Inspector를 무료로 사용해 보세요. 계정을 등록하세요.

또는 웹사이트에서 자세한 내용을 알아보세요: https://inspector.dev

How to Search in a PHP Associative Array – Fast tips

릴리스 선언문 이 기사는 https://dev.to/inspector/how-to-search-in-a-php-associative-array-fast-tips-26o6?1에 복제되어 있습니다. 침해가 있는 경우에는 Study_golang@163으로 문의하시기 바랍니다. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3