
PHP
Php + Sql. Если значение массива == 'значение' , делать действие с предыдущими элементами
Здравствуйте! Новичок в php. У меня такая проблема. В общем, Таблица с данными из базы данных. Нужно проверить если в Block есть значение Block, тогда красить ПРЕДЫДУЩИЕ значения до того, пока в Model не будет какое то значение. Примерно показано в таблице. Задание вроде бы было бы не сложное, если бы нужно было бы красить с верха в низ. У меня получается только красить все, что ниже block'а. К сожалению, сначала красить пока не появился Block тоже не вариант, потому что случаи могут быть разные - или Blocka вообще нету или он в самом начале. Нужен ваш совет, с чего лучше начать и какие могут быть возможные решения. Заранее большое спасибо.


Block встречается только один раз? Тогда смог придумать глуповатый способ с двумя переобходами массива, надеюсь кто-нибудь предложит более эффективный вариант.
P.S Уже после отправки ответа подумал, что можно избавиться от второго цикла, а сделать все в одном цикле, только пусть он сканирует массив с конца, как только встретится Block запоминаете значение и делаете пометку для проверки первого столбца. Но переписывать код уже лень, пробуйте сами.
<?php
// получаете данные таблицы в массив такого формата:
$array = [
['None', 0, 1],
['None', 0, 2],
['1231', 0, 3],
['None', 0, 4],
['None', 0, 5],
['ASBA', 'Block', 6],
['None', 0, 7],
['None', 0, 8],
['None', 0, 9],
];
foreach ($array as $key=>$value) { // перебираем исходный массив
if ($value[1] === 'Block') { // если второй элемент вложенного масива = Block
$mark_element_end = $key; // конечный элемент для выделения = текущему ключу масства
break;
}
}
for ($i = $mark_element_end - 1; $i > 0; $i--) { // цикл от $mark_element_end (не включая) до 0
if ($array[$i][0] !== 'None') { // если первый элемент вложенного масива не равен None
$mark_element_start = $i + 1; // начальный элемент для выделения, не включая
break;
}
}
// Делаете цикл для вывода данных в виде таблицы, но строки между $mark_element_start и $mark_element_end выделяете красным
?>
P.S Уже после отправки ответа подумал, что можно избавиться от второго цикла, а сделать все в одном цикле, только пусть он сканирует массив с конца, как только встретится Block запоминаете значение и делаете пометку для проверки первого столбца. Но переписывать код уже лень, пробуйте сами.
<?php
// получаете данные таблицы в массив такого формата:
$array = [
['None', 0, 1],
['None', 0, 2],
['1231', 0, 3],
['None', 0, 4],
['None', 0, 5],
['ASBA', 'Block', 6],
['None', 0, 7],
['None', 0, 8],
['None', 0, 9],
];
foreach ($array as $key=>$value) { // перебираем исходный массив
if ($value[1] === 'Block') { // если второй элемент вложенного масива = Block
$mark_element_end = $key; // конечный элемент для выделения = текущему ключу масства
break;
}
}
for ($i = $mark_element_end - 1; $i > 0; $i--) { // цикл от $mark_element_end (не включая) до 0
if ($array[$i][0] !== 'None') { // если первый элемент вложенного масива не равен None
$mark_element_start = $i + 1; // начальный элемент для выделения, не включая
break;
}
}
// Делаете цикл для вывода данных в виде таблицы, но строки между $mark_element_start и $mark_element_end выделяете красным
?>
Юрий Башкатов
Интересный способ. Попробую спасибо большое за развёрнутый ответ. ????
Юрий Башкатов
Интересный способ. Попробую, спасибо большое за развёрнутый ответ.
Вариантов решения много.
Можете обход с последней строки к первой делать результата mysql и красить.
А можете писать результат в переменную, при этом всем строкам присваивать метку, например #D1#. Когда встретится Block = замена в текущей переменной метки на стиль покраски и далее снова метку присваиваете, в конце меняете метку на пустоту.
Можете обход с последней строки к первой делать результата mysql и красить.
А можете писать результат в переменную, при этом всем строкам присваивать метку, например #D1#. Когда встретится Block = замена в текущей переменной метки на стиль покраски и далее снова метку присваиваете, в конце меняете метку на пустоту.
Юрий Башкатов
Спасибо за ответ. Буду пробовать.
Похожие вопросы
- Два SQL запроса одновременно | PHP
- PHP&SQL как вставить переменную в запрос sql;
- Есть тут гуру PHP которые знают толк в переборах массивов? (вопрос внутри)
- PHP. Почему нельзя применять функцию count() к строкам? Ведь строка это тот же массив
- какой функционал делают на сайтах с помощью php? вообще не пойму что конкретно пишут на этом языке на сайтах..
- PHP Polling ChatGPT
- Не работает PHP include на хостинге
- Как оптимизировать структуру сайта php. на готовом шаблоне
- Хеширование пароля php
- Подскажите хороший курс по PHP практике?