Array_key_exists ($ key, $array) vs! empty ($ array [$ key])

Я видел, как много людей делают первое, есть ли какое-либо преимущество в производительности, чем одно? Или это просто глазная конфета? Я лично использую последний каждый раз, поскольку он короче и лично более читабельен для меня.

Ответ 1

Другие ответы сосредоточены на различиях между двумя функциями. Это верно, но если исходный массив не содержит значений null или 0 или "",... (пустые значения), вы можете сравнить скорость двух функций:

<?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.

Ответ 2

$array = array(
    'foo' => null
);

echo (int)!empty($array['foo']); // 0
echo (int)array_key_exists('foo', $array); // 1

Ответ 3

empty($array[$key]) возвращает true, когда значение $array[$key] пуст; пустые средства "", 0, NULL, FALSE и т.д. и т.д. и т.д.. Обратите внимание, что эти значения могут иметь смысл в вашем коде.

array_key_exists($key, $array) возвращает true, когда указанный ключ существует в массиве. Он не учитывает значение $array[$key].

Более быстрая альтернатива проверке наличия ключа в массиве заключается в использовании isset($array[$key]).

Ответ 4

Оба они разные

array_key_exists($key, $array) проверяет, существует ли ключ в массиве и возвращает TRUE, если заданный ключ задан в массиве.

тогда

!empty($array[$key]) Определите, пустое или нет значение переменной