robertroth: Ausgabe in Kategorien zusammenfassen

Beitrag lesen

Liebe Mitdenker, liebe Wissende, liebe Neugierige,

meine Funktion sieht wie folgt aus

function test456($mysqli, $lo) {
$stmt = $mysqli->prepare("SELECT p_id, p_type, p_pkategorie, p_code, p_hersteller, p_serie, p_geraet, p_bezeichnung, p_bild, p_artnr, p_farbe, p_inhalt, p_preis, p_bestand, p_hinweis, p_status 
		FROM web_produkte WHERE p_geraet =? ");
$stmt->bind_param("s", $lo);
$stmt->execute();
$stmt->bind_result($p_id, $p_type, $p_pkategorie, $p_code, $p_hersteller, $p_serie, $p_geraet, $p_bezeichnung, $p_bild, $p_artnr, $p_farbe, $p_inhalt, $p_preis, $p_bestand, $p_hinweis, $p_status);
		$stmt->store_result();
	 	
		if($stmt->num_rows() >  0) {     
			while ($stmt->fetch()){
				$test456[] = array( 
					'p_id' 			=> $p_id,
					'p_type'		=> $p_type,
					'p_pkategorie'		=> $p_pkategorie, 
					'p_code'		=> $p_code,
					'p_hersteller' 		=> $p_hersteller, 
					'p_serie' 		=> $p_serie, 
					'p_geraet' 		=> $p_geraet, 
					'p_bezeichnung' 	=> $p_bezeichnung, 
					'p_bild' 		=> $p_bild, 
					'p_artnr' 		=> $p_artnr, 
					'p_farbe' 		=> $p_farbe, 
					'p_inhalt' 		=> $p_inhalt, 
					'p_preis' 		=> $p_preis,
					'p_bestand'		=> $p_bestand, 
					'p_hinweis'		=> $p_hinweis,
					'p_status'		=> $p_status
				);
			}
			return $test456;
			
			}
	}

Meine Ausgabe so

<?php foreach($test456 as $array){?>
<?php echo htmlspecialchars($array['p_code']); ?>
<?php } ?>

Klappt auch alles wunderbar, nun möchte ich die Ausgabe gerne etwas optimieren und zwar gibt es im Feld "p_pkategorie" Zahlen (Kategorien wie z.B. Toner, Tinte usw.), nach denen ich gerne die Ausgabe Gruppieren möchte, sprich im Feld "p_pkategorie" steht eine 1, dann sollte die Überschrift "1" lauten darunter alle Einträge die zu dieser Kategorie passen, in der gleichen Abfrage kommt vielleicht eine "3" vor, dann soll wieder eine neue Überschrift beginnen und darunter eben alle Artikel die zur Kategorie "3" passen.

Kann ich das mit meiner Funktion erreichen oder muss ich da noch weitere Funktionen erstellen.

Das Ergebnisarray sollte zweckmäßigerweise nach der Spalte, nach der Du die Gruppen bilden willst, sortiert sein. Dann funktiniert der Gruppenwechsel so, wie Dedlfix ihn schon kurz beschrieben hat.

<?php 
    if (is_array($test456))  ## sind Artikeldaten da?
    {
        $group = '';         ## bisher gab es keine Gruppe, also initialisieren

        foreach($test456 as $record)
        {
            if ($group != $record['p_pkategorie'])  ## Wenn die Grupp von der vorigen abweicht
            {   
                echo '<h2>' . htmlspecialchars($record['p_pkategorie']) . "</h2>\r\n";  ## Gruppe ausgeben
                $group = $record['p_pkategorie'];  ## neue Gruppe merken
            }

            echo '<p>' . htmlspecialchars($record['p_code']) ."</p>\r\n";  ## Artikeldaten ausgeben
        }
    }
 
?>

ungetestet. Fehler darfst Du bitte hier mitteilen

Du solltest Dir angewöhnen, sprechende Variablenbezeichner zu wählen. Das vereinfacht das Programmieren in größeren Programmen erheblich :-)

Spirituelle Grüße
Euer Robert
robert.r@online.de

--
Möge der wahre Forumsgeist ewig leben!