- Ключ массива существует: возвращаемое значение элемента.
Ключ массива не существует: верните ноль.
Код: Выделить всё
if (isset($lookup_table[$key])) {
return $lookup_table[$key];
} else {
return;
}
Код: Выделить всё
@return $lookup_table[$key];
Код: Выделить всё
error_reporting(0);
$return = $lookup_table[$key];
error_reporting(E_ALL);
return $return;
- Первое требует 2 поиска в B-TREE: один для проверить существование, другой — получить значение. Это фактически удваивает время выполнения.
- Второй использует оператор подавления ошибок и, таким образом, создает огромные накладные расходы в этой строке.
- Третий вызывает обработчик ошибок (который проверяет настройку error_reporting, а затем ничего не отображает) и тем самым создает накладные расходы.
Чтобы ответить на некоторые вопросы:
Массив кэширует результаты сложных вычислений — их слишком сложно выполнить. в настоящее время. Из миллиардов возможных значений только миллионы дают действительный результат. Массив имеет вид 1234567 => 23457, 1234999 => 74361, .... Он сохраняется в PHP-файл размером в несколько мегабайт и включается include_once-d в начале выполнения. Время начальной загрузки не имеет значения.
Если ключ не найден, это просто означает, что это конкретное значение не вернет действительный результат. Проблема в том, чтобы сделать это со скоростью более 50 тысяч в секунду.
Подробнее здесь: https://stackoverflow.com/questions/166 ... -array-key
Мобильная версия