PHP は配列が空かどうかを判断しますが、どちらの方が効率的でしょうか?
仅有的幸福
仅有的幸福 2017-05-16 12:58:57
0
4
832

isset カウントが空です

仅有的幸福
仅有的幸福

全員に返信(4)
刘奇

isset は配列が空かどうかを判断できません

他の 2 つ: http://stackoverflow.com/ques...

結論としては、countよりもemptyの方が効率的です

いいねを押す +0
仅有的幸福

結論だけ言いましょう: 空が最も効率的です。

count は、まず配列の長さをカウントしてから判断する必要があります。

これは間違っていると指摘する返信もありました

カウントの時間計算量は O(n) だとずっと思っていましたが、今回顔を叩かれた後、元のコードを読んで、実際には O(1) であることがわかりました。

ソースコードのリンクを数える

count 関数は配列で動作します:

リーリー

php_count_recursive 操作を確認してから、配列に対する php_count_recursive 関数の操作を見てみましょう: cnt = zend_hash_num_elements(Z_ARRVAL_P(array));

zend_hash_num_elements コード:

リーリー

isset は、変数が定義されているか、NULL 値があるかどうかのみを検出できます。
変数が最初に定義されている場合、!$array は空と同等です。効率も同等です。

いいねを押す +0
Peter_Zhu

isset不能判断我就不回答了,这是PHP基础知识,看手册去
下面主要讲emptycount違い

PHPソースコード(PHP5.4)ベース

リーリー

実装中、empty,还是count,都是取的zVal - value指向的HashTable结构中的elem_num

他の回答では、次のように言いますcount需要计算长度,拜托,PHP会那么傻?还傻乎乎的跑一遍链表,count会直接返回数组的elem_num

結論

つまり、2つの判定方法empty就是执行了elem_num <= 0に違いはありません。どちらも基本となるコードを実行するため、実行速度が同じであることを意味しません。

速度差

http://stackoverflow.com/ques... のテスト結果によると (テスト結果は以下にあります)、count的确要比empty慢一点,也许大家会疑惑,既然都是判断的elem_num が見つかります。なぜ遅いのでしょうか?

なぜ遅いのですか

PHPマニュアルによると:

空の説明行があります:

関数ではなく言語コンストラクターであるため、変数関数から呼び出すことはできません。

結果は明らかです: count是函数,empty却是一个语言构造器
既然是语言构造器,那执行效率是肯定比函数高的,比如echo也是语言构造器

例えばecho 'str1','str2';的效率就比 echo 'str1'.'str2';高,更不用说print

しかし、OpCache または JIT を使用した後は、両方とも最適化されているため、両者に違いはありません (以下を参照)。

ネイティブPHP

リーリー

JIT (または HipHop VM) を使用

リーリー
いいねを押す +0
阿神

まず、連想配列でない場合は、 isset の方が効率的で、通常は empty が使用されます

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート