¿Imprimir una variable solo cuando cambia?

En primer lugar, mi pregunta fue un tanto vaga o confusa ya que no estoy seguro de cómo express mi pregunta para que sea específica. Intento consultar una base de datos de almacenistas para una empresa de tejer (proyecto escolar que usa PHP), pero estoy buscando imprimir la ciudad como encabezado en lugar de con cada información de inventario.

Esto es lo que tengo en este momento:

$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 "

"; print $items[$i]['city']; print "

"; print $items[$i]['name']; print $items[$i]['address']; print $items[$i]['city']; print $items[$i]['phone']; print "
"; print "
";

}

Estoy consultando la base de datos para ver todos los datos, las filas son ref, nombre, dirección, ciudad y teléfono, y lo estoy ejecutando. Consultar el número de filas y luego usar eso para determinar cuántas iteraciones ejecutará el ciclo está bien, pero lo que me gustaría es que el encabezado h2 aparezca sobre la línea for ($ i = 0;).

Intentar simplemente rompe mi página, por lo que podría estar fuera de cuestión. Me imagino que tendré que contar el número de entradas en ‘ciudad’ hasta que detecte un cambio y luego cambie el rumbo a ese nombre, ¿no es así? Eso o hacer un montón de consultas y establecer una variable para cada nombre, pero en el punto, también podría hacerlo manualmente (y dudo mucho que sea la mejor práctica). Ah, y me gustaría recibir cualquier crítica a mi PHP desde que estoy empezando.

Gracias y si necesita más información, ¡solo pregunte!

PD: Nuestra clase está aprendiendo con PostgreSQL en lugar de MySQL, como puede ver en las tags.

Solutions Collecting From Web of "¿Imprimir una variable solo cuando cambia?"

Esto resolverá tus problemas:

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

"; print $items[$i]['city']; print ""; $city = $items[$i]['city']; } print $items[$i]['name']; print $items[$i]['address']; print $items[$i]['city']; print $items[$i]['phone']; print "
"; print "
"; }

Mira el artículo anterior y comprueba si es la misma ciudad; si no, o si no hay un elemento anterior, nueva ciudad.

Todo lo que necesita hacer es realizar un seguimiento de cuándo cambia la ciudad e imprimirla cuando cambie.

Intenté mantener el código lo más similar posible a lo que me proporcionó para que pueda ver dónde ocurren los cambios.

 // 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 "

"; print $items[$i]['city']; print ""; } print $items[$i]['name']; print $items[$i]['address']; print $items[$i]['city']; print $items[$i]['phone']; print "
"; print "
"; // end of loop, the current city, now becomes the previous city $previous_city = $items[$i]['city'];

}

Tenga en cuenta que también necesita ORDER BY city en su SQL para que todos los elementos de 1 ciudad estén agrupados, de lo contrario este método no funcionará