연관 배열은 개발자가 키-값 쌍을 저장할 수 있도록 하는 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() 함수는 연관 배열에서 값을 검색하고, 발견되면 해당 키를 반환하고, 발견되지 않으면 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 루프를 사용하여 연관 배열을 반복하고 특정 값을 수동으로 검색할 수 있습니다. 루프가 배열의 동일한 범위에 있으므로 루프의 모든 데이터에 액세스할 수 있으므로 복잡한 비교나 조작이 필요할 때 유용합니다.
$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() 함수를 사용하면 배열을 필터링하고 테스트 콜백을 통과한 요소만 반환할 수 있습니다.
$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);
성능이 우려 사항 중 하나라면 기사의 이 섹션이 확실히 흥미로울 것입니다.
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% 더 나은 것으로 나타났습니다.
그러나 이 결과는 상황에 따라 많이 달라질 수 있습니다. 위에 링크된 샌드박스에서 코드 조각을 실행하면 foreach가 array_map보다 10배 더 효율적이라는 것을 알 수 있습니다. 로컬 환경에서 스크립트를 복사하여 직접 벤치마크를 만들 수 있습니다.
어쨌든 foreach가 일반적으로 array_map보다 더 효율적인 이유는 콜백 사용을 암시하지 않기 때문입니다. 동일한 범위에서 배열을 직접 사용하는 것보다 함수를 호출하는 데 더 많은 오버헤드가 있습니다. 이러한 이유로 array_map은 각 반복마다 조금 더 많은 시간을 낭비합니다. 하지만 더 큰 데이터세트에만 표시됩니다. 배열이 작을수록 간격은 더 미미해집니다.
Inspector는 소프트웨어 개발자를 위해 특별히 설계된 코드 실행 모니터링 도구입니다. 서버 수준에서 아무것도 설치할 필요가 없습니다. composer 패키지만 설치하면 바로 사용할 수 있습니다.
다른 복잡한 올인원 플랫폼과 달리 Inspector는 매우 쉽고 PHP 친화적입니다. Laravel 또는 Symfony 패키지를 사용해 볼 수 있습니다.
효과적인 자동화, 심층적인 통찰력, 경고 및 알림을 메시징 환경으로 전달하는 기능을 찾고 있다면 Inspector를 무료로 사용해 보세요. 계정을 등록하세요.
또는 웹사이트에서 자세한 내용을 알아보세요: https://inspector.dev
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3