Есть цикл который выводит из БД инфу. Выводит по очереди.
В одном из полей есть ключевая метка в после, до которой инфу выводить не нужно, а после нее нужно. Чтобы узнать номер этой записи нужно сделать цикл с проверкой положения этой метки и только после этого сделать цикл вывода данных.
Метка стоит только в одной записи. И все что до этой записи не нужно выводить.
При простом условии получается что я могу вывести только то что до метки.
И метка может быть а может и не быть
Возможноли оптимизировать код чтобы не было двух циклов прохода по выборке из БД?
Ответ
Можно попробовать накапливать информацию для вывода в некоторую переменную до попадания на метку, а после попадания на метку (если таковая будет) очищать значение этой переменной, а уже после окончания цикла выводить накопленную информацию.
Схематичный пример (за основу взят сэмпл от @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
Комментариев нет:
Отправить комментарий