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

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

Сообщение Anonymous »


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

if (isset($lookup_table[$key])) { вернуть $lookup_table[$key]; } еще { возвращаться; } или

@return $lookup_table[$key]; или

error_reporting(0); $return = $lookup_table[$key]; error_reporting(E_ALL); вернуть $возврат; Все решения далеки от оптимальных:
[*]Первый требует двух поисков в B-TREE: один для проверки существования, другой для получения значения. Это фактически удваивает время выполнения. [*]Второй использует оператор подавления ошибок и, таким образом, создает огромные накладные расходы в этой строке. [*]Третий вызывает обработчик ошибок (который проверит настройку error_reporting, а затем ничего не отобразит) и тем самым создает накладные расходы.
Может быть, я упустил способ избежать обработки ошибок и при этом работать с одним поиском Btree?
Чтобы ответить на некоторые вопросы:
Массив кэширует результаты сложных вычислений, которые необходимо выполнить в режиме реального времени. Из миллиардов возможных значений только миллионы дают действительный результат. Массив имеет вид 1234567 => 23457, 1234999 => 74361, .... Он сохраняется в PHP-файл размером в несколько мегабайт и включается include_once-d в начале выполнения. Время начальной загрузки не имеет значения.

Если ключ не найден, это просто означает, что это конкретное значение не вернет действительный результат. Проблема в том, чтобы сделать это со скоростью более 50 тысяч в секунду.
Ответить

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

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

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

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

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