isset カウントが空です
isset は配列が空かどうかを判断できません
他の 2 つ: http://stackoverflow.com/ques...
結論としては、countよりもemptyの方が効率的です
結論だけ言いましょう: 空が最も効率的です。
count は、まず配列の長さをカウントしてから判断する必要があります。
これは間違っていると指摘する返信もありました カウントの時間計算量は O(n) だとずっと思っていましたが、今回顔を叩かれた後、元のコードを読んで、実際には O(1) であることがわかりました。
これは間違っていると指摘する返信もありました
カウントの時間計算量は O(n) だとずっと思っていましたが、今回顔を叩かれた後、元のコードを読んで、実際には O(1) であることがわかりました。
ソースコードのリンクを数える
count 関数は配列で動作します:
php_count_recursive 操作を確認してから、配列に対する php_count_recursive 関数の操作を見てみましょう: cnt = zend_hash_num_elements(Z_ARRVAL_P(array));
cnt = zend_hash_num_elements(Z_ARRVAL_P(array));
zend_hash_num_elements コード:
isset は、変数が定義されているか、NULL 値があるかどうかのみを検出できます。 変数が最初に定義されている場合、!$array は空と同等です。効率も同等です。
isset不能判断我就不回答了,这是PHP基础知识,看手册去下面主要讲empty和count違い
isset
empty
count
実装中、empty,还是count,都是取的zVal - value指向的HashTable结构中的elem_num
zVal - value
HashTable
elem_num
他の回答では、次のように言いますcount需要计算长度,拜托,PHP会那么傻?还傻乎乎的跑一遍链表,count会直接返回数组的elem_num
PHP
つまり、2つの判定方法、empty就是执行了elem_num <= 0に違いはありません。どちらも基本となるコードを実行するため、実行速度が同じであることを意味しません。
elem_num <= 0
http://stackoverflow.com/ques... のテスト結果によると (テスト結果は以下にあります)、count的确要比empty慢一点,也许大家会疑惑,既然都是判断的elem_num が見つかります。なぜ遅いのでしょうか?
PHPマニュアルによると: 空の説明行があります: 関数ではなく言語コンストラクターであるため、変数関数から呼び出すことはできません。
PHPマニュアルによると:
空の説明行があります:
関数ではなく言語コンストラクターであるため、変数関数から呼び出すことはできません。
結果は明らかです: count是函数,empty却是一个语言构造器既然是语言构造器,那执行效率是肯定比函数高的,比如echo也是语言构造器、
语言构造器
echo
例えばecho 'str1','str2';的效率就比 echo 'str1'.'str2';高,更不用说print
echo 'str1','str2';
echo 'str1'.'str2';
print
しかし、OpCache または JIT を使用した後は、両方とも最適化されているため、両者に違いはありません (以下を参照)。
まず、連想配列でない場合は、 isset の方が効率的で、通常は empty が使用されます
isset は配列が空かどうかを判断できません
他の 2 つ: http://stackoverflow.com/ques...
結論としては、countよりもemptyの方が効率的です
結論だけ言いましょう: 空が最も効率的です。
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
違いPHPソースコード(PHP5.4)ベース
リーリー実装中、
empty
,还是count
,都是取的zVal - value
指向的HashTable
结构中的elem_num
結論
つまり、2つの判定方法、
empty
就是执行了elem_num <= 0
に違いはありません。どちらも基本となるコードを実行するため、実行速度が同じであることを意味しません。速度差
http://stackoverflow.com/ques... のテスト結果によると (テスト結果は以下にあります)、
count
的确要比empty
慢一点,也许大家会疑惑,既然都是判断的elem_num
が見つかります。なぜ遅いのでしょうか?なぜ遅いのですか
結果は明らかです:
count
是函数,empty
却是一个语言构造器
既然是
语言构造器
,那执行效率是肯定比函数高的,比如echo
也是语言构造器
、例えば
echo 'str1','str2';
的效率就比echo 'str1'.'str2';
高,更不用说print
しかし、OpCache または JIT を使用した後は、両方とも最適化されているため、両者に違いはありません (以下を参照)。
ネイティブPHP
リーリーJIT (または HipHop VM) を使用
リーリーまず、連想配列でない場合は、 isset の方が効率的で、通常は empty が使用されます