#문자열변수에 값이 있는가? 체크방법 비교

#문자열변수에 값이 있는가? 체크방법 비교

#찾는 것은 빈 문자열이 아닌 문자열이다.
 '0' = true
 '' = false
 'abs' = true

#데모 문자열 생성
for($i=0;$i<10000;$i++){
    $t = mt_rand();
    if($t%5===2)
    {
        $arr[$i] = '';
    }elseif($t%5===3)
    {
        $arr[$i] = '0';
    }else
    {
        $arr[$i] = base64_encode($t);
    }
}

#결과
@1회
1, 시간 : 0.0022189617157      O : 10000      X : 0  방법 : if(isset($arr[$i]))
2, 시간 : 0.00263595581055      O : 5963        X : 4037        방법 : if(empty($arr[$i]))
3, 시간 : 0.00258111953735      O : 5963        X : 4037        방법 : if($arr[$i])
4, 시간 : 0.00279593467712      O : 8033        X : 1967        방법 : if(isset($arr[$i]\{0\}))
5, 시간 : 0.00549793243408      O : 8033        X : 1967        방법 : if(strlen($arr[$i])>0)
6, 시간 : 0.00293898582458      O : 8033        X : 1967        방법 : if($arr[$i]!=='')


@2회
1, 시간 : 0.00226902961731      O : 10000      X : 0  방법 : if(isset($arr[$i]))
2, 시간 : 0.00261807441711      O : 6020        X : 3980        방법 : if(empty($arr[$i]))
3, 시간 : 0.00254607200623      O : 6020        X : 3980        방법 : if($arr[$i])
4, 시간 : 0.00263500213623      O : 8010        X : 1990        방법 : if(isset($arr[$i]\{0\}))
5, 시간 : 0.00550603866577      O : 8010        X : 1990        방법 : if(strlen($arr[$i])>0)
6, 시간 : 0.00293183326721      O : 8010        X : 1990        방법 : if($arr[$i]!=='')
-----------=------------------------------
#결과
 "찾는 것은 빈 문자열이 아닌 문자열이다."에서 1,2,3 방법은 전부 불합격
1방법은 변수존재만 체크 빈 문자열을 걸러내지 못한다.
2방법은 0을 "변수가 없이 없다"로 처리한다.
3번은 2변과 동일
정확하게 체크되는 방법은 4,5,6 방법
하지만 5번은 문자열 길이를 체크해야하고, 6번은 문자열 비교를 해야한다
즉, 둘다 문자열 처리가 되어 속도가 생대적으로 느리다.
4번방법은 문자열은 맨 처음 글자가 "있나?없나?"를 체크한다.
이 방법은 문자열 처리방식보다 훨씬 빠르다.

------=----------------------------------
#결론
$_POST,$_REQUEST 등의 값은 전부 문자열이기 때문에
그 문자열변수가 비었는지 체크하는 방법으로는
if(isset($arr[$i]\{0\})) 의 방법이 가장 좋다.

------=----------------------------
P.S.
전에 PHP의 속도증가 팁이던가.. 하는
글에 나온게 어제 밤에 갑자기 생각나서
오늘 생각난김에 실햄해서 적어봅니다.

첨부된 파일은 실험에 사용한 원본소스입니다.

PHP에서만 테스트되었습니다.

---=---------------------
#제한 사항
"공대여자는 이쁘다는 걸 알아야, 이 글을 읽고 이해할 수 있습니다."

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📅 달력형