> 백엔드 개발 > PHP 튜토리얼 > 대량의 데이터에서 in_array를 판단하는 효율성 문제를 해결하기 위한 2가지 맞춤형 PHP in_array 함수

대량의 데이터에서 in_array를 판단하는 효율성 문제를 해결하기 위한 2가지 맞춤형 PHP in_array 함수

高洛峰
풀어 주다: 2023-03-03 22:10:01
원래의
1479명이 탐색했습니다.

그러나 배열이 상대적으로 크면 성능이 저하되고 실행 시간이 길어집니다. 따라서 대규모 배열에 맞게 최적화하려면 다음 두 가지 방법이 있습니다(둘 다 사용자 정의 함수를 통해 구현됨).

1. 배열의 키와 값을 뒤집고 isset을 사용하여 해당 키가 배열에 있는지 확인합니다.

/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $flipArray = array_flip($array);
    return isset($flipArray[$item]);
}
로그인 후 복사

isset을 사용하는 대신 판단에 array_key_exists를 사용하지 않는 이유가 무엇인지 궁금할 수도 있습니다. array_key_exists()와 isset()의 비교를 살펴보겠습니다.
isset()는 배열의 NULL 값에 대해 TRUE를 반환하지 않지만 array_key_exists()는 반환합니다.

<?php
$search_array = array(&#39;first&#39; => null, &#39;second&#39; => 4);
// returns false
isset($search_array[&#39;first&#39;]);
// returns true
array_key_exists(&#39;first&#39;, $search_array);
?>
로그인 후 복사

2. implode를 사용하여 연결하고, strpos를 직접 사용하여 판단합니다.


implode 함수 + 쉼표를 사용하여 연결하고, strpos를 직접 사용합니다. 판단하다. PHP의 문자열 위치는 특히 데이터 양이 많을 때 매우 빠릅니다. 다만, 시작과 끝 부분에 ","를 추가해야 하므로 더욱 엄격하다는 점에 유의해야 합니다. 예: ,user1,user2,user3, 검색 시 ,user1을 검색합니다. 또한 strpos! == false를 사용하세요. 첫 번째 항목은 0을 반환하기 때문입니다. 예는 다음과 같습니다.

/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $str = implode(&#39;,&#39;, $array);
    $str = &#39;,&#39; . $str . &#39;,&#39;;
    $item = &#39;,&#39; . $item . &#39;,&#39;;
    return false !== strpos($item, $str) ? true : false;
}
로그인 후 복사


대용량 데이터에서 in_array를 판단하는 효율성 문제를 해결하기 위한 추가 2가지 맞춤형 PHP in_array 함수 관련 기사에 대해서는 주의하시기 바랍니다. PHP 중국어 웹사이트로!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿