Страницы

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

пятница, 31 января 2020 г.

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

#php


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

Метка стоит только в одной записи.  И все что до этой записи не нужно выводить.
При простом условии получается что я могу вывести только то что до метки.
И метка может быть а может и не быть

Возможноли оптимизировать код чтобы не было двух циклов прохода по выборке из БД?
    


Ответы

Ответ 1



Можно попробовать накапливать информацию для вывода в некоторую переменную до попадания на метку, а после попадания на метку (если таковая будет) очищать значение этой переменной, а уже после окончания цикла выводить накопленную информацию. Схематичный пример (за основу взят сэмпл от @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

Ответ 2



Вот вам гипотетический код, так как из вашего вопроса неясны начальные данные: $ar = [ ['metka' => 0, 'value' => 2], ['metka' => 1, 'value' => 3], ['metka' => 0, 'value' => 4], ]; $output = false; foreach ($ar as $item) { if ($item['metka'] == 1) { $output = true; } if ($output) { echo $item['value']; } }

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

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