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. Есть ли элегантный способ сделать это читабельным и быстрым одновременно?

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