Самый быстрый способ обработки неопределенного ключа массиваPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Самый быстрый способ обработки неопределенного ключа массива

Сообщение Anonymous »

В очень узком цикле мне нужно получить доступ к десяткам тысяч значений в массиве, содержащем миллионы элементов. Ключ может быть неопределенным: в этом случае допустимо возвращать NULL без какого-либо сообщения об ошибке:
  • Ключ массива существует: возвращаемое значение элемента.
    Ключ массива не существует: верните ноль.
Я знаю несколько решений:

Код: Выделить всё

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, а затем ничего не отображает) и тем самым создает накладные расходы.
Я упустил способ избежать обработки ошибок и все еще работаете с одним поиском по Btree?
Чтобы ответить на некоторые вопросы:
Массив кэширует результаты сложных вычислений — их слишком сложно выполнить. в настоящее время. Из миллиардов возможных значений только миллионы дают действительный результат. Массив имеет вид 1234567 => 23457, 1234999 => 74361, .... Он сохраняется в PHP-файл размером в несколько мегабайт и включается include_once-d в начале выполнения. Время начальной загрузки не имеет значения.
Если ключ не найден, это просто означает, что это конкретное значение не вернет действительный результат. Проблема в том, чтобы сделать это со скоростью более 50 тысяч в секунду.

Подробнее здесь: https://stackoverflow.com/questions/166 ... -array-key
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»