#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']; } }
Комментариев нет:
Отправить комментарий