PHP8: элегантное и быстрое увеличение неустановленных индексовPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 PHP8: элегантное и быстрое увеличение неустановленных индексов

Сообщение Anonymous »


PHP8 выдает предупреждение, если индекс не установлен.

В PHP7 следующий (очень упрощенный) фрагмент раньше был «грязным», но очень читаемым и рабочим решением для подсчета данных в соответствии с их ключом на лету (например, в алгоритмах переиндексации):

$keylist = array('keyA','keyB','keyA','keyA'); $idx_count = массив(); foreach ($keylist как $thiskey){ $idx_count[$thiskey]++; } Решения в PHP8, требующие проверки существования индекса, как при проверке с помощью isset():

$keylist = array('keyA','keyB','keyA','keyA'); $idx_count = массив(); foreach ($keylist как $thiskey){ if (!isset($idx_count[$thiskey]){ $idx_count[$thiskey] = 0; } $idx_count[$thiskey]++; } или проверка с помощью пустой():

$keylist = array('keyA','keyB','keyA','keyA'); $idx_count = массив(); foreach ($keylist как $thiskey){ if (empty($idx_count[$thiskey]){$idx_count[$thiskey] = 0; } $idx_count[$thiskey]++; } или с ветвлением:

$keylist = array('keyA','keyB','keyA','keyA'); $idx_count = массив(); foreach ($keylist как $thiskey){ if (!isset($idx_count[$thiskey]){ $idx_count[$thiskey] = 1; }еще{ $idx_count[$thiskey]++; } } или используя нулевую операцию объединения:

$keylist = array('keyA','keyB','keyA','keyA'); $idx_count = массив(); foreach ($keylist как $thiskey){ $idx_count[$thiskey] ??= 0; $idx_count[$thiskey]++; } Вопросы:
1. Помимо ухудшения читабельности, как эти параметры влияют на производительность при использовании очень больших $keylists?
В любом случае это дополнительное сравнение в каждом цикле, тогда как внутренняя «ловушка» в PHP7 (вероятно) повлияла только на первую итерацию.
2. Есть ли элегантный способ сделать это читабельным и быстрым одновременно?
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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