PHP8: элегантное и быстрое увеличение неустановленных индексов ⇐ Php
PHP8: элегантное и быстрое увеличение неустановленных индексов
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. Есть ли элегантный способ сделать это читабельным и быстрым одновременно?
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. Есть ли элегантный способ сделать это читабельным и быстрым одновременно?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Quarkus Arc блокирует многомодульную сборку в случае неустановленных свойств в сборке модуля
Anonymous » » в форуме JAVA - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-