検索

ホームページ  >  に質問  >  本文

PHP は配列が空かどうかを判断しますが、どちらの方が効率的でしょうか?

isset カウントが空です

仅有的幸福仅有的幸福2864日前876

全員に返信(4)返信します

  • 怪我咯

    怪我咯2017-05-16 13:00:57

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

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

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

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 13:00:57

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

    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
  • 天蓬老师

    天蓬老师2017-05-16 13:00:57

    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
  • 阿神

    阿神2017-05-16 13:00:57

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

    返事
    0
  • キャンセル返事