Intereting Posts

Печать переменной только тогда, когда она изменяется?

Во-первых, мой вопрос был немного расплывчатым или сбивающим с толку, так как я не совсем уверен, как правильно формулировать мой вопрос. Я пытаюсь запросить базу данных продавцов для вязальной компании (школьный проект с использованием PHP), но я хочу напечатать город как заголовок, а не с информацией о каждом складе.

Вот что я имею в данный момент:

$sql = "SELECT * FROM mc16korustockists where locale = 'south'"; $result = pg_exec($sql); $nrows = pg_numrows($result); print $nrows; $items = pg_fetch_all($result); print_r($items); for ($i=0; $i<$nrows2; $i++) { print "<h2>"; print $items[$i]['city']; print "</h2>"; print $items[$i]['name']; print $items[$i]['address']; print $items[$i]['city']; print $items[$i]['phone']; print "<br />"; print "<br />"; 

}

Я запрашиваю базу данных для всех данных в ней, строки ref, имя, адрес, город и телефон и выполнение этого. Запросить количество строк, используя это, чтобы определить, сколько итераций цикла для запуска все нормально, но я бы хотел, чтобы заголовок h2 появился над линией for ($ i = 0;).

Попытка просто ломает мою страницу, так что может быть и речи. Я полагаю, что мне нужно будет подсчитать количество записей в «городе», пока оно не обнаружит изменения, а затем измените заголовок на это имя, я думаю? Это или сделать кучу запросов и установить переменную для каждого имени, но в точке, я мог бы также сделать это вручную (и я очень сомневаюсь, что это была бы лучшая практика). О, и я бы приветствовал любые критические замечания к моему PHP, так как я только начинаю.

Спасибо, и если вам нужна дополнительная информация, просто спросите!

PS Наш класс учится с PostgreSQL вместо MySQL, как вы можете видеть в тегах.

Это решит ваши проблемы:

 $sql = "SELECT * FROM mc16korustockists where locale = 'south' order by city"; ... $city = ''; for ($i=0; $i<$nrows2; $i++) { if($items[$i]['city']!=$city) { print "<h2>"; print $items[$i]['city']; print "</h2>"; $city = $items[$i]['city']; } print $items[$i]['name']; print $items[$i]['address']; print $items[$i]['city']; print $items[$i]['phone']; print "<br />"; print "<br />"; } 

Посмотрите на предыдущий элемент и проверьте, не является ли он тем же городом – если нет, или нет предыдущего предмета, нового города!

Все, что вам нужно сделать, это отслеживать, когда город меняет и печатает его при его изменении.

Я попытался сохранить код как можно более похожим на то, что вы предоставили, чтобы вы могли видеть, где происходят изменения.

 // store previous city, set to NULL by default so the first city from the result set will always be printed // (assuming that the first city from the result set is not null). $previous_city = NULL; for ($i=0; $i<$nrows2; $i++) { // determine what the city is from the current row // creating a separate variable for this is not really necessary, but helps to make the example clearer $current_city = $items[$i]['city']; // check if current city is different to the one in the previous row if ($previous_city != $current_city) { // city is different, lets print it print "<h2>"; print $items[$i]['city']; print "</h2>"; } print $items[$i]['name']; print $items[$i]['address']; print $items[$i]['city']; print $items[$i]['phone']; print "<br />"; print "<br />"; // end of loop, the current city, now becomes the previous city $previous_city = $items[$i]['city']; 

}

Обратите внимание: вам также нужно ЗАКАЗАТЬ город в вашем SQL, чтобы все элементы из 1 города были сгруппированы вместе, иначе этот метод не будет работать