Я видел, как много людей делают первое, есть ли какое-либо преимущество в производительности, чем одно? Или это просто глазная конфета? Я лично использую последний каждый раз, поскольку он короче и лично более читабельен для меня.
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])
Определите, пустое или нет значение переменной