Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

Оптимизация цикла и вложенного условия

Есть цикл который выводит из БД инфу. Выводит по очереди. В одном из полей есть ключевая метка в после, до которой инфу выводить не нужно, а после нее нужно. Чтобы узнать номер этой записи нужно сделать цикл с проверкой положения этой метки и только после этого сделать цикл вывода данных.
Метка стоит только в одной записи. И все что до этой записи не нужно выводить. При простом условии получается что я могу вывести только то что до метки. И метка может быть а может и не быть
Возможноли оптимизировать код чтобы не было двух циклов прохода по выборке из БД?


Ответ

Можно попробовать накапливать информацию для вывода в некоторую переменную до попадания на метку, а после попадания на метку (если таковая будет) очищать значение этой переменной, а уже после окончания цикла выводить накопленную информацию.
Схематичный пример (за основу взят сэмпл от @u_mulder ):
$output = ''; foreach ($ar as $item) { if ($item['metka'] == 1) { $output = ''; } $output .= $item['value']; } echo $output;
Можно это дело вынести в отдельную функцию/метод:
function getOutputString(array $data, callable $func, $tagKey = 'metka', $tagValue = 1) { $output = ''; foreach ($data as $row) { if ($row[$tagKey] == $tagValue) { $output = ''; } $output .= $func($item); } return $output; }
Пример вызова:
$ar = [ ['metka' => 0, 'value' => 2], ['metka' => 1, 'value' => 3], ['metka' => 0, 'value' => 4], ];
$output = getOutputString($ar, function($row) { return $row['value'];} ); // output: 34

Комментариев нет:

Отправить комментарий