그러나 배열이 상대적으로 크면 성능이 저하되고 실행 시간이 길어집니다. 따라서 대규모 배열에 맞게 최적화하려면 다음 두 가지 방법이 있습니다(둘 다 사용자 정의 함수를 통해 구현됨).
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('first' => null, 'second' => 4); // returns false isset($search_array['first']); // returns true array_key_exists('first', $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(',', $array); $str = ',' . $str . ','; $item = ',' . $item . ','; return false !== strpos($item, $str) ? true : false; }
대용량 데이터에서 in_array를 판단하는 효율성 문제를 해결하기 위한 추가 2가지 맞춤형 PHP in_array 함수 관련 기사에 대해서는 주의하시기 바랍니다. PHP 중국어 웹사이트로!