으아악
구현 시 empty 또는 count인지 여부에 관계없이 zVal - value가 가리키는 HashTable이 사용됩니다. . elem_num 구조
다른 답변에서는 count가 길이를 계산해야 한다고 합니다. PHP가 그렇게 멍청할 수 있나요? 어리석게 연결된 목록을 다시 실행하면 count는 배열의 elem_num
을 직접 반환합니다.
결론
🎜따라서 두 가지 판단 방법 사이에는 차이가 없습니다🎜, empty는 elem_num <= 0을 실행하는 것입니다. 둘 다 동일한 기본 코드를 실행하기 때문입니다. 실행 속도가 동일하다는 의미입니다. 🎜
🎜속도차🎜
🎜http://stackoverflow.com/ques...의 테스트 결과에 따르면(테스트 결과는 아래에 있음) count가 실제로 empty보다 느리다는 것을 알 수 있습니다. > 한 가지, 모두 elem_num으로 판단되는데 왜 느린 걸까요? 🎜
🎜왜 느린가요🎜
🎜PHP 매뉴얼에 따르면: 🎜
🎜비어 있음을 설명하는 줄이 있습니다: 🎜
🎜함수가 아닌 언어 생성자이기 때문에 변수 함수로 호출할 수 없습니다. 🎜
🎜결과는 분명합니다. count는 함수이지만 empty는 언어 생성자입니다. 언어이기 때문입니다. 생성자 는 함수보다 실행 효율성이 확실히 높습니다. 예를 들어 echo도 언어 생성자입니다. 🎜
🎜예를 들어 echo 'str1','str2';는 print는 말할 것도 없고 echo 'str1'.'str2';보다 더 효율적입니다. 코드 > 🎜
🎜🎜하지만🎜 OpCache나 JIT를 사용한 후에는 둘 다 최적화되었기 때문에 둘 사이에 차이가 없습니다(아래 참조). 🎜
🎜네이티브 PHP🎜
으아악
🎜JIT(또는 HipHop VM) 사용🎜
으아악
isset은 배열이 비어 있는지 확인할 수 없습니다
나머지 두 개: http://stackoverflow.com/ques...
결론은 개수보다 비어 있는 것이 더 효율적이라는 것입니다
결론만 말씀드리자면, 비어 있는 것이 가장 효율적입니다.
count는 먼저 배열의 길이를 세고 판단해야 합니다.카운트 소스 코드 링크
count 함수는 배열에서 작동합니다.
으아아아php_count_recursive 작업을 살펴보고 배열에 대한 php_count_recursive 함수의 작업을 살펴보겠습니다.
cnt = zend_hash_num_elements(Z_ARRVAL_P(array));
zend_hash_num_elements 코드:
으아아아isset은 변수가 정의되었는지 또는 NULL 값이 있는지 여부만 감지할 수 있습니다.
변수가 먼저 정의되면 !$array는 비어 있는 것과 같습니다. 효율성도 동일합니다.
isset
판단할 수 없으면 대답하지 않겠습니다. 이것은 PHP의 기본 지식입니다.다음은 주로
empty
및 count 차이isset
不能判断我就不回答了,这是PHP基础知识,看手册去下面主要讲
empty
和count
的区别根据PHP的源代码(PHP5.4)
在实现中,不论是
empty
,还是count
,都是取的zVal - value
指向的HashTable
结构中的elem_num
结论
所以两者之间的判断方式是没任何差距的,
empty
就是执行了elem_num <= 0
,既然两者都是执行相同底层代码,但是不代表执行速度一样。速度差异
根据http://stackoverflow.com/ques...中的测试结果来看(测试结果在下方),大家会发现
count
的确要比empty
慢一点,也许大家会疑惑,既然都是判断的elem_num
,那么为什么会慢?为什么慢
所以结果很明显了:
count
是函数,empty
却是一个语言构造器
既然是
语言构造器
,那执行效率是肯定比函数高的,比如echo
也是语言构造器
,比如
PHP 소스코드(PHP5.4) 기준echo 'str1','str2';
的效率就比echo 'str1'.'str2';
高,更不用说print
으아악 구현 시
을 직접 반환합니다. 결론empty
또는count
인지 여부에 관계없이zVal - value
가 가리키는HashTable
이 사용됩니다. .elem_num
구조empty
는elem_num <= 0
을 실행하는 것입니다. 둘 다 동일한 기본 코드를 실행하기 때문입니다. 실행 속도가 동일하다는 의미입니다. 🎜 🎜속도차🎜 🎜http://stackoverflow.com/ques...의 테스트 결과에 따르면(테스트 결과는 아래에 있음)count
가 실제로empty
보다 느리다는 것을 알 수 있습니다. > 한 가지, 모두elem_num
으로 판단되는데 왜 느린 걸까요? 🎜 🎜왜 느린가요🎜 🎜PHP 매뉴얼에 따르면: 🎜 🎜비어 있음을 설명하는 줄이 있습니다: 🎜 🎜함수가 아닌 언어 생성자이기 때문에 변수 함수로 호출할 수 없습니다. 🎜 🎜결과는 분명합니다.count
는 함수이지만empty
는언어 생성자
입니다.언어이기 때문입니다. 생성자
는 함수보다 실행 효율성이 확실히 높습니다. 예를 들어echo
도언어 생성자
입니다. 🎜 🎜예를 들어echo 'str1','str2';
는print
는 말할 것도 없고echo 'str1'.'str2';
보다 더 효율적입니다. 코드 > 🎜 🎜🎜하지만🎜 OpCache나 JIT를 사용한 후에는 둘 다 최적화되었기 때문에 둘 사이에 차이가 없습니다(아래 참조). 🎜 🎜네이티브 PHP🎜 으아악 🎜JIT(또는 HipHop VM) 사용🎜 으아악우선 연관배열이 아니라면 isset이 더 효율적이고 비어있는 배열이 주로 사용됩니다