16

多くの人が前者をやっているのを見てきましたが、どちらか一方を行うことでパフォーマンス上の利点はありますか?それとも単なる目の保養ですか?後者は短くて個人的に読みやすいので、私は毎回後者を個人的に使用しています。

4

4 に答える 4

16

他の応答は、2つの機能の違いに焦点を当てています。これは真実ですが、ソース配列にnullorまたは0or ""、...(空の値)の値が含まれていない場合は、2つの関数の速度をベンチマークできます。

<?php

function makeRandomArray( $length ) {
    $array = array();
    for ($i = 0; $i < $length; $i++) {
        $array[$i] = rand(1, $length);
    }

    return $array;
}

function benchmark( $count, $function ) {
    $start = microtime(true);
    for ($i = 0; $i < $count; $i++) {
        $function();
    }
    return microtime(true) - $start;
}

$runs = 100000;
$smallLength = 10;
$small = makeRandomArray($smallLength);

var_dump(benchmark($runs, function() {
    global $small, $smallLength;
    array_key_exists(rand(0, $smallLength), $small);
}));
var_dump(benchmark($runs, function() {
    global $small, $smallLength;
    !empty($small[rand(0, $smallLength)]);
}));

これにより、次の結果が得られました。

小さなアレイの場合:

  • array_key_exists:float(0.18357992172241)
  • empty:float(0.072798013687134)
  • isset:float(0.070242881774902)

比較的大きな配列の場合:

  • array_key_exists:float(0.57489585876465)
  • empty:float(0.0068421363830566)
  • isset:float(0.0069410800933838)

したがって、可能であれば、emptyまたはを使用する方が高速issetです。

于 2011-07-30T17:10:16.757 に答える
9

array_key_exists($key, $array)異なる結果を!empty($array[$key])生成する可能性があるため、パフォーマンスや好みの問題ではありません

                              | array_key_exists($key, $array) | !empty($array[$key]) |
+-----------------------------+--------------------------------|----------------------+
| $array[$key] does not exist | false                          | false                |
| $array[$key] is truthy      | true                           | true                 |
| $array[$key] is falsey      | true                           | false                |

真理値表は、偽の値(false、0、NULLなど)で異なることがわかります。したがって、誤った値が存在!empty($array[$key])すると見なされる可能性がある状況には適していません。たとえば、値0が意味をなす空の状態をテストするべきではありません。$array["number_of_children"]


これを使用すると、1つの例外を除いてisset($array[$key])同じ結果が得られます。array_key_exists($key, $array)

                                      | array_key_exists($key, $array) | isset($array[$key]) |
+-------------------------------------+--------------------------------|---------------------+
| $array[$key] does not exist         | false                          | false               |
| $array[$key] is truthy              | true                           | true                |
| $array[$key] is falsey but not NULL | true                           | true                |
| $array[$key] is NULL                | true                           | false               |
于 2011-07-30T17:09:40.487 に答える
5
$array = array(
    'foo' => null
);

echo (int)!empty($array['foo']); // 0
echo (int)array_key_exists('foo', $array); // 1
于 2011-07-30T17:00:17.190 に答える
1

どちらも違います

array_key_exists($key, $array)キーが配列に存在するかどうかをチェックし、指定されたキーが配列に設定されている場合はTRUEを返します。

一方

!empty($array[$key])変数値が空かどうかを判別します

于 2011-07-30T17:03:39.620 に答える