1.php in_array 방법 설명
php 배열 요소의 존재 여부 찾기, 일반적으로 사용됩니다.in_array 방법
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
매개 변수 설명:
니들
검색할 값, needl의 경우e는 문자열이고, 비교는 대소문자 구분입니다.
헤이스택
비교에 사용되는 배열
스트릭트
세 번째 인자인 경우 strict 값이 TRUE이면 in_array() 함수가 체크됩니다 니들 클래스타입과 haystack에 있는같다
값 되돌리기
needle을 찾으면TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.
2.in_array 메타 찾기소효율
비교 배열 haystack가 클 경우 in_array 효율이 떨어질 수 있음
예: in_array 사용10만 개의 원소가 있는 배열에 대해 1000번의 비교를 하다
<?php
$arr = array();
// 10만 개의 요소 배열 만들기
for($i=0; $i<100000; $i++){
$arr[] = $i;
}
// 기록 시작 시간
$starttime = getMicrotime();
// 1000자리 랜덤 만들기 in_array 비교 사용
for($j=0; $j<1000; $j++){
$str = mt_rand(1,99999);
in_array($str, $arr);
}
// 기록 종료 시간
$endtime = getMicrotime();
echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
/**
* microtime 가져오기
* @return float
*/
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}
?>
런타임:2003.6449432373ms
in_array를 사용하여 10만 개의 원소 존재 여부 판단배열에서 1000회 비교, 실행시간 약 2초 소요
3. 원소 찾기 효율 향상 방법
우리는 먼저 array_flip을 이용하여 키 값을 교환한 후,isset 방법으로 원소의 존재 여부를 판단하면 효율을 높일 수 있다.
예:array_flip을 사용하여 키 값을 먼저 교환하고 i를 사용합니다.sset 방법 10만 원소 배열 중 1000회 비교
<?php
$arr = array();
// 10만 개의 요소 배열 만들기
for($i=0; $i<100000; $i++){
$arr[] = $i;
}
// 키 교환
$arr = array_flip($arr);
// 기록 시작 시간
$starttime = getMicrotime();
// 무작위로 1000자리 만들기 iset 사용 비교
for($j=0; $j<1000; $j++){
$str = mt_rand(1,99999);
isset($arr[$str]);
}
// 기록 종료 시간
$endtime = getMicrotime();
echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
/**
* microtime 가져오기
* @return float
*/
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}
?>
언타임: 1.2781620025635ms
array_flip과 iset으로 요소 존재 여부 판단하기10만 개의 원소 배열에서 1000회 비교, 작동 시간은 약 1.2밀리초 소요
따라서 큰 배열의 비교를 위해 array_flip과isset 방법은 in_array보다 훨씬 효율적이다
'개발 꿀팁 > PHP' 카테고리의 다른 글
php json 데이터는 gzip으로 압축하여 출력한다 (0) | 2022.08.23 |
---|---|
php ip2long 음수 발생 원인과 해결 방법 (0) | 2022.08.23 |
php 한 변이 N인 솔리드 및 속이 빈 마름모꼴을 인쇄 (0) | 2022.08.22 |
curl https 요청 방법 가져오기 (0) | 2022.08.22 |
php 스트림 파일 전송 및 수신 (0) | 2022.08.22 |