PHP Code verbessern von einer Schleife

Hallo Leute!

Hab mal wieder ein kleines Problem.

Vorweg, mein Code unten funktioniert ohne Probleme. Nur ich würde das ganze gerne in einer kompakten Schleife abfragen, ohne das ich ständig einen neuen Absatz hinzufügen müsste.

Mit der ersten foreach Abfrage stelle ich mal sicher welche Art von Redakteuren sich in der Datenbank befinden. Und diese gebe ich dann mit der zweiten foreach aus. Nur ist da das Problem das ich von diesem Code 17 Stück hintereinander habe. Ich würde gerne das in einer Schleife abarbeiten, da es ja den Code auch "schlanker" macht.

Für Ratschläge, Hinweise, Tipps und Lösungen würde ich mich freuen.

PHP:
while ($rows[] = mysql_fetch_array($result));

// Welche Art von Redakteur ist vorhanden? Wird hier abgefragt

foreach($rows as $row2)
{
switch($row2['was_id'])
{
case 1 : $redakteur_1 = 1; break;
case 2 : $redakteur_2 = 1; break;
case 3 : $redakteur_3 = 1; break;
case 4 : $redakteur_4 = 1; break;
case 5 : $redakteur_5 = 1; break;
case 6 : $redakteur_6 = 1; break;
case 7 : $redakteur_7 = 1; break;
case 8 : $redakteur_8 = 1; break;
case 9 : $redakteur_9 = 1; break;
case 10 : $redakteur_10 = 1; break;
case 11 : $redakteur_11 = 1; break;
case 12 : $redakteur_12 = 1; break;
case 13 : $redakteur_13 = 1; break;
case 14 : $redakteur_14 = 1; break;
case 15 : $redakteur_15 = 1; break;
case 16 : $redakteur_16 = 1; break;
case 17 : $redakteur_17 = 1; break;
}
}


// Und hier wird nun einzeln alles durchgegangen und je nachdem welche Art von Redakteur vorhanden ist ausgegeben. Und genau hier würde ich gerne eine Schleife haben, anstatt 17 mal den selben Code nur mit anderen Zahlen...

if($redakteur_1 == 1)
{
echo "<b>Chefredakteur:</b><br>";
foreach($rows as $row2)
{
if($row2['was_id'] == 1)
{
echo "<a href=\"/redakteur/".$row2['id']."/\">".$row2['name']." ".$row2['zuname']."</a><br>";
}
}
}

if($redakteur_2 == 1)
{
echo "<b>Stellv. Chefredakteur:</b><br>";
foreach($rows as $row2)
{
if($row2['was_id'] == 2)
{
echo "<a href=\"/redakteur/".$row2['id']."/\">".$row2['name']." ".$row2['zuname']."</a><br>";
}
}
}

// usw.
 
Also ich Würd sagen du machst einfach eine funktion daraus. So brauchst du nacher nur 17 mal die funktion aufrufen und dein Code ist wesentlich übersichtlicher.

Und wenn mal was geändert wird brauchste nur mehr die eine Funktion umschreiben und alle änderungen wirken sich auf die 17 abfragen aus.

Was mich bei dir wundert warum du die Daten nicht von der Db abfragst?
(Stellv. Chefredakteur,Chefredakteur unsw) Das gehört doch alles in die Db rein oder zumindesten in ein Array. Daran wird wohl dein hauptbroplem liegen das du sachen mit php versucht zu lösen die ganz einfach über eine db abgefragt werden können.

Mfg Splasch
 
Zuletzt bearbeitet:
Du kannst auch die Bezeichnungen in einem Array ablegen, dann sparst du dir die Wiederholungen:
PHP:
$bezeichnungen = array('','Chefredakteur','Stellv. Chefredakteur');

foreach ($rows as $row) {
  if ! (isset{$exists_in_db[$row['was_id']]) {
    $exists_in_db[$row['was_id']] = 1;
    echo "<b>".$bezeichnungen[$row['was_id']],"</b><br>\n";
    foreach ($rows as $redakteur)
      if ($redakteur['was_id'] == $rows['was_id']) {
        echo "<a href=\"/redakteur/".$redakteur['id']."/\">".$redakteur['name']." ".$redakteur['zuname']."</a><br>\n";
      }
    }
  }
}


Abgesehen davon würde ich die Bezeichnungen ebenfalls in der Datenbank speichern und über einen Fremdschlüssel mit der Reakteurstabelle verlinken.

Dann im ersten Schritt die Bezeichnungen mit id aus der DB auslesen und dann in der Schleife pro Bezeichnung ein Rowset mit den Redakteuren.

Dann muss nicht jedesmal mit foreach das komplette Rowset durchgelaufen werden.
 
Ich hätte es wie folgt gelöst:
PHP:
$position = array('Chefredakteur','Stellv. Chefredakteur');
$gruppen = array();
while( $row = mysql_fetch_array($result) ) {
	if( isset($gruppen[$row['was_id']-1]) ) {
		$gruppen[$row['was_id']-1] = array();
	}
	$gruppen[$row['was_id']-1][] = $row;
}
ksort($gruppen);

echo '<dl>';
foreach( $gruppen as $id => $gruppe ) {
	if( empty($gruppe) ) {
		continue;
	}
	echo '<dt>'.$position[$id].':</dt>';
	foreach( $gruppe as $person ) {
		echo '<dd><a href="/redakteur/'.$person['id'].'/">'.$person['name'].' '.$person['zuname'].'</a>';
	}
}
echo '</dl>';
 
@Gumbo
Vielen Dank für deinen Code, genau so wollte ich es haben.

Nur bekomme ich zusätzlich eine Fehlermeldung:
Warning: Illegal offset type in isset or empty in C:\Programme\xampp\htdocs\inc\xyzzyx\admin\test.inc.php on line 66

In der Zeile 66 würde das stehen:
PHP:
if( isset($gruppen[$position]) ) {

Wie bekomme ich den Fehler weg?

Natürlich auch danke an allen anderen! Finde das echt super von euch, auf das wäre ich nie gekommen. :)
 
Zurück