source

빈 어레이를 확인하는 중: 개수 vs 빈 어레이

factcode 2023. 1. 29. 20:17
반응형

빈 어레이를 확인하는 중: 개수 vs 빈 어레이

'PHP 배열이 비어 있는지 확인하는 방법'에 대한 이 질문은 이 질문을 생각하게 했습니다.

countempty레레 가비 어때 는때 때때 때?

은 빈 하다면 2개를 입니다.empty부울 질문에 대한 부울 답변을 제공하기 때문입니다.위에 링크된 질문으로 보아count($var) == 0인기 있는 방법입니다.기술적으로 맞긴 하지만 내겐 말이 안 된다.예: $var, 비어있습니까? A: 7. 음...

제가 사용해야 할 이유가 있나요?count == 0니면 개개 ?향 향? ?? ???

답변에 이 지적한 와 같이, 「」는 「」입니다.count를 카운트 할 필요가 에, .반면, 「모든 요소를 카운트 할 필요가 있습니다」라고 하는 것입니다.empty비어있지 않다는 것을 알게 되면 바로 멈출 수 있습니다.이 를 주지만, 이 경우에는 같은 요.count일 수 왜 가 '을 요?count($var) == 0

는 보통 ★★★★★★★★★★★를 사용합니다.empty왜 굳이 카운트를 사용하는지 모르겠습니다.어레이가 크면 카운트는 시간이 오래 걸리고 오버헤드가 커집니다.어레이가 비어 있는지 여부를 알아야 하는 경우 empty를 사용합니다.

실제로 어떤 것이 더 빠른지 궁금해서 간단한 스크립트를 만들어 그 기능을 벤치마킹했습니다.

<?php

function benchmark($name, $iterations, $action){
    $time=microtime(true);
    for($i=0;$i<=$iterations;++$i){
        $action();
    }
    echo $name . ' ' . round(microtime(true)-$time, 6) . "\n";
}

$iterations = 1000000;
$x = array();
$y = range(0, 10000000);
$actions = array(
    "Empty empty()" => function() use($x){
        empty($x);
    },
    "Empty count()" => function() use($x){
        count($x);
    },
    "Full empty()" => function() use($y){
        empty($y);
    },
    "Full count()" => function() use($y){
        count($y);
    },
    ############
    "IF empty empty()" => function() use($x){
        if(empty($x)){ $t=1; }
    },
    "IF empty count()" => function() use($x){
        if(count($x)){ $t=1; }
    },
    "IF full empty()" => function() use($y){
        if(empty($y)){ $t=1; }
    },
    "IF full count()" => function() use($y){
        if(count($y)){ $t=1; }
    },
    ############
    "OR empty empty()" => function() use($x){
        empty($x) OR $t=1;
    },
    "OR empty count()" => function() use($x){
        count($x) OR $t=1;
    },
    "OR full empty()" => function() use($y){
        empty($y) OR $t=1;
    },
    "OR full count()" => function() use($y){
        count($y) OR $t=1;
    },
    ############
    "IF/ELSE empty empty()" => function() use($x){
        if(empty($x)){ $t=1; } else { $t=2; }
    },
    "IF/ELSE empty count()" => function() use($x){
        if(count($x)){ $t=1; } else { $t=2; }
    },
    "IF/ELSE full empty()" => function() use($y){
        if(empty($y)){ $t=1; } else { $t=2; }
    },
    "IF/ELSE full count()" => function() use($y){
        if(count($y)){ $t=1; } else { $t=2; }
    },
    ############
    "( ? : ) empty empty()" => function() use($x){
        $t = (empty($x) ? 1 : 2);
    },
    "( ? : ) empty count()" => function() use($x){
        $t = (count($x) ? 1 : 2);
    },
    "( ? : ) full empty()" => function() use($y){
        $t = (empty($y) ? 1 : 2);
    },
    "( ? : ) full count()" => function() use($y){
        $t = (count($y) ? 1 : 2);
    }
);

foreach($actions as $name => $action){
    benchmark($name, $iterations, $action);
}
//END

이 작업을 하고 있었기 때문에 일반적으로 count()/empty()와 관련된 작업을 수행하는 퍼포먼스도 확인하려고 했습니다.

PHP 5.4.39 사용:

Empty empty() 0.118691
Empty count() 0.218974
Full empty() 0.133747
Full count() 0.216424
IF empty empty() 0.166474
IF empty count() 0.235922
IF full empty() 0.120642
IF full count() 0.248273
OR empty empty() 0.123875
OR empty count() 0.258665
OR full empty() 0.157839
OR full count() 0.224869
IF/ELSE empty empty() 0.167004
IF/ELSE empty count() 0.263351
IF/ELSE full empty() 0.145794
IF/ELSE full count() 0.248425
( ? : ) empty empty() 0.169487
( ? : ) empty count() 0.265701
( ? : ) full empty() 0.149847
( ? : ) full count() 0.252891

HipHop VM 3.6.1(dbg) 사용

Empty empty() 0.210652
Empty count() 0.212123
Full empty() 0.206016
Full count() 0.204722
IF empty empty() 0.227852
IF empty count() 0.219821
IF full empty() 0.220823
IF full count() 0.221397
OR empty empty() 0.218813
OR empty count() 0.220105
OR full empty() 0.229118
OR full count() 0.221787
IF/ELSE empty empty() 0.221499
IF/ELSE empty count() 0.221274
IF/ELSE full empty() 0.221879
IF/ELSE full count() 0.228737
( ? : ) empty empty() 0.224143
( ? : ) empty count() 0.222459
( ? : ) full empty() 0.221606
( ? : ) full count() 0.231288

결론: PHP를 사용하는 경우:

  1. empty()는 두 시나리오 모두 count()보다 훨씬 빠릅니다.배열은 비어 있습니다.

  2. count()는 완전 배열 또는 빈 배열에서도 동일하게 수행합니다.

  3. 단순 IF 또는 부울 연산만 수행하는 것은 동일합니다.

  4. IF/ELSE가 (? :)보다 매우 약간 효율적입니다.중간에 식을 사용하여 수십억 번 반복하지 않는 한 전혀 의미가 없습니다.

결론: HHVM을 사용하는 경우:

  1. empty()는 count()보다 조금 빠르지만 그다지 중요하지 않습니다.

    [나머지는 PHP와 동일합니다]

결론적으로 어레이가 비어 있는지 여부만 알 필요가 있는 경우에는 항상 empty()를 사용합니다.

이것은 많은 것을 고려하지 않고 간단히 수행된 호기심 테스트에 불과했습니다.이는 개념 증명일 뿐 실제 가동에 운영을 반영하지 않을 수 있습니다.

개인적인 취향인 것 같아요.은 이렇게 말할지도 .empty보다 고속입니다(예: http://jamessocol.com/projects/count_vs_empty.php)).count원래 어레이용으로 제작되었기 때문에 더 좋습니다. empty보다 일반적이며 다른 유형에 적용할 수 있습니다.

php.net에 대해 다음과 경고를 .count : 삭제,

count()는 설정되지 않은 변수에 대해 0을 반환할 수 있지만 빈 배열로 초기화된 변수에 대해서도 0을 반환할 수 있습니다.변수가 설정되어 있는지 테스트하려면 isset()을 사용합니다.

즉, 변수가 설정되어 있지 않으면 PHP로부터 정의되어 있지 않다는 통지를 받습니다. 「 」를 하기 전에, 「 」를 사용해 주세요.count, 변수를 체크하는 것이 좋습니다.isset,, ., 필, 필, 서, 습, 습, 습, 습, 습, ., ., ., ., ..empty.

어레이가 비어 있는지 여부를 판단할 때 빈 대신 카운트를 사용해야 하는 이유가 있습니까?

빈 어레이가 아닌 어레이에서 크기를 파악해야 하는 경우:

if( 0 < ( $cnt = count($array) ) )
{
 echo "Your array size is: $cnt";
}
else
 echo "Too bad, your array is empty :(";

그러나 카운트를 사용하는 것은 권장하지 않습니다.단, 계산 대상이 어레이인지 100% 확신할 수 없는 경우입니다. 코드 있는데, 온가 에러 함수를 반환하고 .FALSE한 것은 다음과 같습니다 열배 、 리열 、 리음 、 음음 음음 。

var_dump(count(FALSE));

출력:

int 1

그 는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★empty ★★★★★★★★★★★★★★★★★」if(array() === $array)빈 어레이가 있는지 확인합니다.

또는 변수를 부울(암시적 또는 명시적으로)로 캐스팅할 수 있습니다.

if( $value )
{
  // array is not empty
}

if( (bool) $value )
{
  // array is still not empty
}

이메음음음음음음음음음음음 an an an an가 생성됩니다.E_NOTICE되어 있지 , 이와 하게, 변수도 정의되어 있지 않습니다.count().

자세한 내용은 유형 비교에 대한 PHP 설명서 페이지를 참조하십시오.

count()는, 인터페이스로 동작하는 으로, 「어레이크」로, 「어레이크」인터페이스로 동작하는 것이 것 같습니다.ArrayAccess/Countableempty()이러한 오브젝트에 요소가 없는 경우에도 false를 반환합니다., 클래스는 「」를 .Countable 않고 elements?"인 "Does this collection contains elements입니다.라는 、 문문이, 、count()더 나은 선택입니다.

제 개인적인 취향은 우아함을 코딩하는 것입니다(특정 사용 사례와 관련).count()가 문제의 테스트에 대해 올바른 데이터형(이 경우 부울형)으로 응답하지 않는다는 Dan McG의 의견에 동의하며 개발자는 if 문을 채우기 위해 더 많은 코드를 작성해야 합니다.

이것이 퍼포먼스에 큰 영향을 미치는지 아닌지는 매우 큰 어레이(대부분의 셋업에서는 메모리 할당이 충분하지 않을 수 있습니다)에서만 논의됩니다.

특히 PHP의 $_POST 어레이에 관해서는 다음과 같이 쓰고 보는 것이 훨씬 "논리적인" 것 같습니다.

if ( !empty ( $_POST ) ) {
    // deal with postdata
}

이미 답변이 되었지만(그리고 어떤 것에 대해 논의했더라도) 다른 사람에게 도움이 되기를 바랍니다.시나리오에서는 요소가 것을 코드의 ), 나는 7개의 요소를 .array_diff0으로 하다

제34 for34 。count 동안 empty둘 다 같은 계산을 하기 때문에 내 코드는 정상입니다.

, '다음에', '다음에', '다음에', '다음에', '다음에', '다음에', '다음에', '다음에', '다음에', '다음에'를== ★★★★★★★★★★★★★★★★★」===PHP에서와 같이 - 두 배열이 동일한지 확인합니다.최선을 다해서 하는 말이지만count »empty »== empty array그럼, 어느 쪽이 최고의 특권을 제공하는지 확인해 주세요. 같은 에는 ★★★★★★★★★★★★★★★★★★★★★★★.count제일 느려서 지금 쓰고 있어요확인하다serialize

더 좋은 이유는 없다.count($myArray) == 0에 걸쳐서empty($myArray)은은의의 의다다다다다어떤 사람들은 다른 사람들보다 더 읽기 쉽다고 생각할지도 모른다.한쪽이 다른 쪽보다 약간 더 나은 성능을 보일 수 있지만, 대부분의 php 애플리케이션에서 중요한 요소가 될 것 같지는 않습니다.모든 실질적인 목적을 위해, 선택은 취향의 문제이다.

empty를 사용하는 것이 필수인 경우가 있습니다.예를 들어 다음 코드입니다.

$myarray = array();

echo "myarray:"; var_dump($myarray); echo "<br>";
echo "case1 count: ".count($myarray)."<br>";
echo "case1 empty: ".empty($myarray)."<br>";

$glob = glob('sdfsdfdsf.txt');

echo "glob:"; var_dump($glob); echo "<br>";
echo "case2 count: ".count($glob)."<br>";
echo "case2 empty: ".empty($glob);

이 코드를 다음과 같이 실행하면 http://phpfiddle.org/main/code/g9x-uwi

다음의 출력이 표시됩니다.

myarray:array(0) { } 
case1 count: 0
case1 empty: 1

glob:bool(false) 
case2 count: 1
case2 empty: 1

만약에 count출력입니다.empty glob은 empty glob으로 됩니다.비어 있는지 확인해야 합니다.

글로벌 문서:

일치하는 파일/디렉토리가 포함된 배열을 반환합니다. 일치하는 파일이 없으면 빈 배열이거나 오류가 발생하면 FALSE를 반환합니다.
주의: 일부 시스템에서는 빈 일치와 오류를 구분할 수 없습니다.

다음 질문도 확인해 주세요.카운트(false)가 1을 반환하는 이유는 무엇입니까?

는 negative를 int(1)count()

는 는는더 prefer prefer i($array === [] || !$array)을 사용하다

네, 빈 어레이를 예상해야 하지만 반환 유형을 강제하지 않고 기능을 적절하게 구현해서는 안 됩니다.

의 예」count()

var_dump(count(0));
> int(1)
var_dump(count(false));
> int(1)

내 마음을 리메이크했어, 고마워.

그럼 , 용, 용, 사, 사, 사, 습, 습, 습, 습, ok, ok, ok, ok, ok, ok, ok, ok, okempty ★★★★★★★★★★★★★★★★★」count 말하면, 히 . . . . . . . .count에는 을 해야 하며, 배열에는 을 사용해야 .empty문자열뿐만 아니라 배열에도 사용할 수 있습니다.따라서 대부분의 서로 할 수 docs를 php docs의 .countempty그리고 역도 성립.

언급URL : https://stackoverflow.com/questions/2216110/checking-for-empty-arrays-count-vs-empty

반응형