PHP-Schleifen steuern

In PHP können für wiederholende Vorgänge Schleifen verwendet werden. Dabei wird ein bestimmter Code abhängig von einer Bedingung so lange wiederholend ausgeführt, bis die Bedingung nicht mehr zutrifft. Manchmal ist es notwendig, diesen Vorgang zu steuern. Das ist z.B. notwendig, wenn die Schleife beim Vorkommen eines Werts übersprungen oder abgebrochen werden soll. Für solche Steuerungen können die folgenden Anweisungen verwendet werden.

continue

Mit der Anweisung continue veranlasst man, dass die Bearbeitung des Programmcodes übersprungen wird. Wichtig ist dabei, die continue-Anweisung vor dem Programmcode einzufügen. Beim folgenden Beispiel werden nacheinander die Zahlen von 0 bis 9 ausgegeben. Eine Ausnahme bildet dabei die Zahl 5, die in Verbindung mit der if-, else-Abfrage mit continue übersprungen wird.

<?php

for ($i = 0; $i < 10; $i++)
{

  // Überspringen bei $i = 5
  if ($i == 5)
  {
    continue;
  }

  echo $i . '<br>';
}
?>

Die Programmlogik kann natürlich auch anders aufgebaut werden, sodass z.B. mehrere Werte übersprungen werden. Beim folgenden Beispielcode beginnt die Schleife im Grunde erst bei der Zahl 5, da die vorherigen Zahlen übersprungen werden.

<?php

for ($i = 0; $i < 10; $i++)
{

  // Überspringen bei $i < 5
  if ($i < 5)
  {
    continue;
  }

  echo $i . '<br>';
}
?>

break

Es kann vorkommen, dass eine Schleife abgebrochen werden muss. Das kann z.B. der Fall sein, wenn man ein Array verarbeiten möchte, jedoch nur bis ein bestimmter Wert im Array vorkommt. Hierfür kann man die Anweisung break verwenden. Diese Anweisung kann nicht nur bei Schleifen (while, do while, for und foreach) verwendet werden, sondern auch bei der Switch-Abfrage. Beim folgenden Beispiel bricht die Schleife beim Wert Do ab.

<?php

$tage = array('Mo', 'Di', 'Mi', 'Do', 'Fr');

for ($i = 0; $i < count ($tage); $i++)
{

  // Abbruch bei Do
  if ($tage[$i] == 'Do') 
  {
    break;
  }

  echo $tage[$i] . '<br>';
}
?>

Falls man auf den Index bzw. Key des Arrays zugreifen möchte, bei dem der Abbruch erfolgte, kann man den Code erweitern. Beim folgenden Beispiel wird dieser in der Variable $index gespeichert. Zusätzlich erfolgt ein Hinweistext mit dem Index.

<?php

$index = false;
$tage = array('Mo', 'Di', 'Mi', 'Do', 'Fr');

for ($i = 0; $i < count ($tage); $i++)
{

  // Abbruch bei Do
  if ($tage[$i] == 'Do')
  {
    $index = $i;
    echo 'Abbruch bei Index ' . $index;
    break;
  }

  echo $tage[$i] . '<br>';
}
?>

return

Die Anweisung return wird häufig in Funktionen verwendet, die an verschiedenen Stellen einer Anwendung aufgerufen werden können. Beim Aufruf einer Funktion wird mit return ein Rückgabewert an das aufrufende Modul übergeben und die Programmsteuerung wird an der Stelle fortgesetzt, an der der Aufruf erfolgte. Eine Funktion kann natürlich auch eine Schleife enthalten. Mit return wird nicht nur eine Schleife abgebrochen, sondern die Funktion mit einem Rückgabewert beendet.

Den Effekt kann man beim folgenden Code nachvollziehen. Die gesamte Schleife ist in der Funktion schleife () untergebracht. Ebenfalls innerhalb der Funktion ist ein Text, der ausgegeben werden soll. Nach Beendigung der Funktion wird diese direkt aufgerufen, der Rückgabewert wird in der Variable $rueckgabe gespeichert und danach ausgegeben. Das hat zur Folge, dass am Bildschirm lediglich der Index 3 ausgegeben wird, da an der Stelle der Abbruch erfolgte. Der auszugebende Text wird dagegen nicht ausgegeben, weil die Funktion vorher beendet wurde.

<?php

function schleife () {

  $tage = array('Mo', 'Di', 'Mi', 'Do', 'Fr');

  for ($i = 0; $i < count ($tage); $i++)
  {

    // Abbruch mit Rückgabewert
    if ($tage[$i] == 'Do')
    {
      return $i;
    }
  }

  // Text, der nicht ausgegeben wird
  echo 'Auszugebender Text <br>';

}

// Aufruf der Funktion
$rueckgabe = schleife();

// Rückgabewert ausgeben
echo $rueckgabe;
?>

Der Unterschied ist bemerkbar, wenn man den auszugebenden Text vor der Schleife einfügt. In dem Fall würde der Text mit ausgegeben werden, da der Abbruch der Funktion innerhalb der Schleife mit return später erfolgt.

<?php

function schleife () {

  // Text, der ausgegeben wird
  echo 'Auszugebender Text <br>';

  $tage = array('Mo', 'Di', 'Mi', 'Do', 'Fr');

  for ($i = 0; $i < count ($tage); $i++)
  {

    // Abbruch mit Rückgabewert
    if ($tage[$i] == 'Do')
    {
      return $i;
    }
  }

}

// Aufruf der Funktion
$rueckgabe = schleife();

// Rückgabewert ausgeben
echo $rueckgabe;
?>

Sollte das Wirken von return auf eine Funktion nicht verständlich sein, kann man den Bereich PHP-Funktionen durcharbeiten und diese Stelle danach wiederholen. Der Bereich wird im PHP-Tutorials eh als nächstes erläutert.