PHP/Tutorials/Einstieg/Arrays

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Arrays gehören zu den zusammengesetzten Datentypen von PHP. Sie dienen dazu, in einer Variablen mehr als einen Wert zu speichern. Diese Werte können jeden beliebigen PHP-Datentyp haben.

Um diese Werte im Array wiederfinden zu können, wird jeder Wert unter einem eigenen Schlüssel abgelegt. Ein solcher Schlüssel kann eine Zahl oder eine beliebige Zeichenkette sein. PHP unterscheidet dabei zwischen Groß- und Kleinschreibung. Eine Besonderheit bei Schlüsseln sind Zeichenketten, die wie Zahlen aussehen. In diesem Fall wandelt PHP die Zeichenkette in eine Zahl um, die Schlüssel 17 und "17" bezeichnen den gleichen Eintrag.

Statt Arrays zu „erfinden“, könnte man auch einfach mehrere Variablen verwenden. Das Array hat aber den Vorteil, eine in sich abgeschlossene Einheit zu bilden, und dass man den Schlüssel für einen Array-Zugriff auch aus einer Variablen zusteuern kann. Diese Form des indirekten Zugriffs ermöglicht beispielsweise die Verarbeitung aller Einträge eines Arrays in einer Programmschleife, ohne die einzelnen Schlüssel oder auch nur ihre Anzahl beim Programmieren kennen zu müssen.

Aufbau von Arrays

Die Datenstruktur "Array" finden sich in vielen Programmiersprachen. Sie stellen sich dort zumeist als eine Menge von Speicherplätzen dar, deren Anzahl beim Erzeugen des Arrays festgelegt werden muss und die fortlaufend ab 0 oder 1 nummeriert sind.

In PHP ist das anders. Wieviel Speicher für ein Array gebraucht wird, legt PHP selbst fest, und Sie können zum Speichern von Werten beliebige Zahlen oder Zeichenketten als Schlüssel verwenden. Das liegt daran, dass PHP die Speicherplätze im Array nicht fest nummeriert, sondern die Einträge als Paar aus Schlüssel und Wert speichert. Ein Zugriff auf den Schlüssel 3 im Array bedeutet also nicht: „lies den dritten Eintrag“, sondern „suche den Eintrag heraus, der den Schlüssel 3 hat“. Ein weiterer Effekt dieser Vorgehensweise ist, dass die Einträge eines Arrays nach Zugangsreihenfolge geordnet sind, und nicht nach dem Wert des Schlüssels. Wird eine Schlüsselreihenfolge gebraucht, muss das Array zunächst sortiert werden (wofür PHP Funktionen anbietet).

Einfache Array mit Integer-Schlüsseln

Erzeugen eines Arrays

Erzeugen eines einfachen Arrays
Ohne Arrays müsste man mehrere Variablen erzeugen, um eine Liste von Werten zu speichern
<?php
  $user_0 = 'Max Müller';
  $user_1 = 'Dieter Doll';
  $user_2 = 'Eckart Engel';
?>
Ein Array ermöglicht die Ablage mehrerer Werte in einer Variablen
<?php
   // Erzeuge ein Array aus einem Array-Literal und speichere einige Werte darin
   $userListe = [
      'Max Müller', 
      'Eckart Engel',
      'Dieter Doll'
   ];
   var_dump($userListe);

   // Alte Schreibweise für Array-Literale, bis PHP 5.3 die einzige Möglichkeit
   $gehalt = ARRAY(1500, 1704, 815);
?>

Dieses Beispiel zeigt zunächst das Aussehen eines Array-Literals. Eine durch Komma getrennte Liste von Werten, die in eckigen Klammern stehen, wird vom PHP Interpreter als ein Array verstanden. Weil keine Schlüssel zu den Werten angegeben wurden, vergibt PHP sie fortlaufend selbst, beginnend mit 0. Das Literal ist im Beispiel auf mehrere Zeilen verteilt, das geschah für eine bessere Lesbarkeit und ist nicht verpflichtend.

Die Kurzsyntax [ ... ] wurde mit PHP 5.4 eingeführt. Ob Sie die Kurzform oder die alte Form mit der Pseudofunktion ARRAY() benutzen, ist Ihnen überlassen. Technisch besteht kein Unterschied.

Die Funktion var_dump(), die zumeist zur Fehlersuche genutzt wird, zeigt uns, was jetzt in unserem neuen $userListeArray steht:

array(3) {
  [0]=>
  string(11) "Max Müller"
  [1]=>
  string(12) "Eckart Engel"
  [2]=>
  string(11) "Dieter Doll"
}

Das liest sich so: Wir haben ein Array mit 3 Einträgen. Die Einträge werden innerhalb der geschweiften Klammern einzeln aufgeführt, jeweils mit Schlüssel und Wert auf einer eigenen Zeile. Das Pfeilsymbol => bezeichnet in PHP eine Zuordnung von Schlüssel und Wert in einem Array. Wir finden also z. B. unter dem Schlüssel 1 einen String aus 12 Zeichen, mit dem Inhalt "Eckart Engel".

Zugriff auf einzelne Elemente

Um auf einzelne Array-Einträge zuzugreifen, verwendet man den Zugriffsoperator []. Der Schlüssel, auf dessen Wert man zugreifen will, wird zwischen den eckigen Klammern notiert.

Zugriff auf einzelne Array-Elemente
<?php
   // Erzeuge ein Array und speichere einige Werte darin
   $userListe = [
      'Max Müller',
      'Eckart Engel',
      'Dieter Doll'
   ];
   $eintrag = $userListe[2];
   echo "Die Userliste enthält am Index 2 den Namen $eintrag";
?>
Hier wird der Wert zum Index 2 gelesen und in einer anderen Variablen gespeichert.

Der Inhalt dieser Variablen wird mittels String Parsing in die Ausgabezeile eingefügt.

Beachten Sie: Ausgegeben wird Dieter Doll, nicht etwa Eckart Engel. Hier wird nicht der zweite Eintrag ermittelt, sondern PHP sucht den Schlüssel 2 und liefert den ihm zugeordneten Wert. Die automatisch vergebenen Schlüsselnummern von PHP beginnen bei 0. Das Zwischenspeichern ist nicht unbedingt nötig, einfache Array-Indexe können vom PHP String Parsing direkt verstanden werden:
<?php
  // Erzeuge ein Array und speichere einige Werte darin
  $userListe = [
    'Max Müller',
    'Eckart Engel',
    'Dieter Doll'
  ];
  echo "Die Userliste enthält am Index 2 den Namen $userListe[2]";
?>

Schreiben von Array-Elementen

Mit dem Zugriffsoperator kann man Arrayeinträge nicht nur lesen, sondern auch schreiben:

Schreiben von Array-Elementen
<?php
   // Erzeuge ein Array und speichere einige Werte darin
   $userListe = [
      'Max Müller',
      'Eckart Engel',
      'Dieter Doll'
   ];
   $userListe[1] = 'Thomas Teufel';
   $userListe[99] = 'Hugo Hatemmel';
   $userListe[66] = 'Paul Panther';
   var_dump($userListe);
?>
Der Eintrag am Index 1 (Eckart Engel) wird durch Thomas Teufel ersetzt, und es werden zwei neue Einträge hinzugefügt.

Der bekannte Zuweisungsoperator akzeptiert als linken Operanden auch Arrayelemente. Werte zu vorhandenen Schlüsseln werden überschrieben, Werte mit neuen Schlüssel werden dem Array hinzugefügt.

Bevor Sie weiterlesen, halten Sie einmal kurz inne und überlegen Sie, wie genau nun die Ausgabe von var_dump() ausehen mag.

?

?

array(5) {
  [0]=>
  string(11) "Max Müller"
  [1]=>
  string(13) "Thomas Teufel"
  [2]=>
  string(11) "Dieter Doll"
  [99]=>
  string(13) "Hugo Hatemmel"
  [66]=>
  string(12) "Paul Panther"
}

Hatten Sie die Reihenfolge richtig? PHP Einträge sind nach Zugangsreihenfolge geordnet, nicht aufsteigend nach dem Wert des Schlüssels. Thomas Teufel hat einen bestehenden Wert überschrieben und ist deswegen an zweiter Stelle geblieben.

Schlüsselwerte im Array-Literal selbst bestimmen

Das Festlegen eigener Werte für die Schlüssel ist nicht nur mit dem Zuweisungsoperator möglich, sondern auch in einem Array-Literal. Dazu dient der Pfeil-Operator =>, den Sie bereits aus der Ausgabe von var_dump() kennen. Schauen Sie sich das Beispiel an und halten Sie danach wieder kurz inne, um zu überlegen, was var_dump() ausgeben wird.

Festlegen von Schlüsseln im Array-Literal
<?php
   // Erzeuge ein Array und speichere einige Werte darin
   $userListe = [
      7 => 'Max Müller',
      5 => 'Eckart Engel',
           'Dieter Doll'
   ];
   var_dump($userListe);
?>

?

?

array(3) {
  [7]=>
  string(12) "Max Müller"
  [5]=>
  string(11) "Eckart Engel"
  [8]=>
  string(11) "Dieter Doll"
}

Max Müller und Eckart Engel sind klar, sie sind in dieser Reihenfolge und mit diesen Schlüsseln angegeben worden. Bei Dieter Doll ist es so, dass PHP sich merkt, welches der höchste bisher benutzte Integer-Schlüssel war. Wird ein neuer Wert ohne Schlüssel hinzugefügt, verwendet PHP den nächsthöheren.

Hinzufügen neuer Werte ohne Kenntnis des höchsten Index

Der Zugriffsoperator [] ermöglicht auch das Hinzufügen neuer Werte zu einem Array, ohne explizit einen Schlüssel anzugeben. PHP vergibt ihn dann selbst, analog zum vorigen Beispiel. Zu diesem Zweck lässt man den Schlüsselwert zwischen den eckigen Klammern einfach weg.

Automatisches Vergeben von Schlüsselnummern
<?php
   // Erzeuge ein Array und speichere einige Werte darin
   $userListe = [
      7 => 'Max Müller',
      5 => 'Eckart Engel',
           'Dieter Doll'
   ];
   $userListe[] = 'Quentin Quacksalber';
   var_dump($userListe);
?>
Das Ergebnis entspricht dem Array-Literal
[7 => 'Max Müller, 5 => 'Eckart Engel', 8 => 'Dieter Doll', 9 => 'Quentin Quacksalber'].


Wenn eine Zahl als Schlüssel nicht reicht

Die bisher vorgestellten Beispiele verwendeten einfache Arrays mit numerischen Schlüsseln. Es gibt Situationen, wo das nicht reicht.

Strings als Schlüssel

Arrays können mehr sein als eine nummerierte Liste von Werten. Genauso kann man sie als einfache Datenobjekte benutzen, in denen einem Namen ein Wert zugeordnet (assoziiert) wird. Man nennt Arrays mit solchen Schlüsseln deshalb auch assoziative Arrays. Verwendet werden solche Arrays beispielsweise in vielen Datenbank-Anbindungen von PHP.

Datenbankzugriff liefert Array mit String-Schlüsseln
<?php
$result = $mysqli->query(<<<SQL
SELECT name, vorname, plz, ort, strasse 
  FROM kunden 
 WHERE name='Müller'
SQL
);
$kunde = $result->fetch_assoc();

var_dump($kunde);
echo "Der Kunde wohnt in " . $kunde['ort'];
?>
Dieses Beispiel zeigt einen idealisierten (ohne Fehlerprüfungen) Datenbankzugriff über die MYSQLI-Schnittstelle. Das SQL-Statement selbst ist als heredoc-String notiert.
Der erste Funktionsaufruf $mysqli->query sendet eine SQL Abfrage an die Datenbank und bekommt ein Ergebnis-Objekt zurück, der zweite Aufruf $mysqli->fetch_assoc ermittelt den ersten Suchtreffer.

Das Result-Objekt einer MYSQLI-Abfrage kennt mehrere fetch...-Funktionen, fetch_assoc ist diejenige davon, die die gefundene Datenzeile als assoziatives Array zurückgibt. Der var_dump-Aufruf aus dem Beispiel könnte zum Beispiel ausgeben:

array(5) {
  ["name"]=>
  string(3) "Müller"
  ["vorname"]=>
  string(5) "Manuel"
  ["plz"]=>
  string(5) "10557"
  ["ort"]=>
  string(6) "Berlin"
  ["strasse"]=>
  string(18) "Platz der Republik 1b"
}

Der nach var_dump folgende echo-Befehl zeigt, wie man mit dem Zugriffsoperator auf einzelne Einträge eines assoziativen Arrays zugreift.

Achtung!

Es ist in PHP 7.2 noch möglich, die Anführungszeichen bei einem String wegzulassen. Man könnte im obigen Beispiel statt $kunde['ort'] nur kurz $kunde[ort] schreiben, PHP nimmt dann an, dass es sich hier um eine Konstante handele, die vergessen wurde zu definieren, und führt implizit ein define('ort', 'ort'); aus. Das Problem ist offensichtlich: Wenn Sie aus irgendeinem Grund einen define('ort', 'zappenduster'); brauchen, führt $kunde[ort] zu dem Hinweis, dass in $kunde keine Eigenschaft namens "zappenduster" vorhanden sei. Bis PHP 7.1 führt das Weglassen der Anführungszeichen zu einem Hinweis, ab PHP 7.2 ist es eine Warnung mit der Ergänzung, dass es bald ein Fehler sein wird.
Es gibt viel alten Code, in dem auf die Anführungszeichen verzichtet wurde. Nehmen Sie es sich nicht zum Vorbild.

Und weil PHP historisch wild gewachsen ist und trotz vieler Verbesserungen immer noch Quirks aufweist, ist diese Vorgabe nicht immer richtig.

Manchmal eben doch ohne Anführungszeichen
<?php
$kunde = [ "name" => "Müller", "vorname" => "Manuel" ];

echo "Der Kunde heißt $kunde['name']";
?>
Es sieht so schön richtig aus, aber PHP sagt nur:
Parse error: syntax error, unexpected (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in [...][...]

Sie blicken verwirrt? Macht nichts, das tun die meisten Menschen bei PHP Parserfehlern...

Die einfache Syntax des String Parsing versteht das nicht. Sie müssen entweder die Anführungszeichen weglassen - was kein Problem ist, weil definierte Konstanten vom String Parsing nicht beachtet werden - oder Sie verwenden die komplexe Syntax mit geschweiften Klammern. Wir möchten Ihnen empfehlen, die vier Extrazeichen zu investieren und eine konsistente Notation von Arrayzugriffen einzuhalten.
<?php
$kunde = [ "name" => "Müller", "vorname" => "Manuel" ];

echo "Der Kunde heißt $kunde[name]";      // Besser
echo "Der Kunde heißt {$kunde['name']}";  // Gut

Mischbetrieb

Sie können Integer- und String-Schlüssel in einem Array gemischt verwenden. Die Integer-Schlüssel haben insofern eine Sonderrolle, dass PHP sich den höchsten verwendeten Integer-Schlüssel merkt, um beim Anhängen von Werten ohne Schlüssel den nächst höheren Integer-Schlüssen vergeben zu können. Die String-Schlüssel haben auf diese Ermittlung keinen Einfluss.

Solche gemischten Schlüssel werden gerne verwendet, um einem eigentlich numerisch geschlüsselten Array einige Zusatzinformationen anzuhängen. Wenn ein solcher Bedarf besteht, ist es aber sauberer, einen Ansatz mit Objektorientierter Programmierung zu verfolgen und eine Klasse zu erstellen.

Fallstricke bei Schlüsseln

PHP unterstützt genau zwei Typen von Schlüsseln: Integer und String. Alles andere wird konvertiert.

Die Konvertierungen, die stattfinden, sind:

string in integer
Wenn ein String wie ein gültiger dezimaler Integerwert aussieht, wird er nach Integer konvertiert. $a[8] und $a['8'] bezeichnen das gleiche Array-Element. $a['08'] oder $a['0x08'] dagegen nicht, weil diese Strings Literale in Oktal- oder Hexadezimalnotation sind. $a['+8'] wird ebenfalls nicht konvertiert, $a['-8'] dagegen schon.
float in integer
Fließkommazahlen werden auf Integer gerundet. Diese Rundung wird von PHP fehlerhaft durchgeführt, wenn der maximale Integerbetrag knapp überschritten wird. Vermeiden Sie es, große Fließkommazahlen als Schlüssel zu verwenden.
bool in integer
Die booleschen Werte true und false werden in die Zahlen 1 und 0 umgewandelt.
Null in string
Der Wert Null wird in einen leeren String umgewandelt
Arrays und Objekte
Sie können nicht als Schlüssel verwendet werden. PHP weist eine Warnung Illegal offset type aus.

Mehrdimensionale Arrays

Für manche Zwecke ist es sinnvoll, Daten nicht als lineare Liste, sondern als Ebene, Würfel oder noch höherdimensionales Gebilde zu organisieren. Ein zweidimensionales Array eignet sich zum Beispiel als Darstellung eines Spielfeldes oder einer Verkaufsübersicht nach Region und Warentyp, eine dritte Dimension kommt hinzu, wenn pro Region und Warentyp noch eine Aufschlüsselung nach Vertriebszweig hinzukommen soll.

Die schlechte Nachricht lautet: PHP kennt keine mehrdimensionalen Arrays. Das, was in anderen Programmiersprachen als mehrdimensionales Array angeboten wird, ist unter der Motorhaube ein eindimensionales Array, auf das die Indexe des mehrdimensionalen Arrays umgerechnet werden. Das passt nicht zu PHP.

Die gute Nachricht lautet: Man kann so tun, als ob. Ein Array kann beliebige Werte speichern, warum also nicht ein anderes Array. Nehmen wir als Beispiel ein Tic-Tac-Toe Spielfeld. Um Angaben wie "erste Zeile, zweite Spalte" besser umsetzen zu können, soll das Array hier so angelegt werden dass der Index des ersten Eintrags 1 ist:

tic-tac-toe im Array of Arrays
<?php
   $tictac = [
      1=>[ 1=>' ', ' ', ' ' ],
      2=>[ 1=>' ', ' ', ' ' ],
      3=>[ 1=>' ', ' ', ' ' ]
   ];

   $tictac[1][2] = "X";   // Setze ein X in Zeile 1, Spalte 2
   var_dump($tictac);
?>

Ein Dump eines mehrdimensionalen Arrays ist ziemlich lang. Um ihn hier zu zeigen, wurden einige Zeilenumbrüche entfernt:

array(3) { [1] => array(3) { [1]=>    string(1) " "
                             [2]=>    string(1) "X"
                             [3]=>    string(1) " "
  }
           [2] => array(3) { [1]=>    string(1) " "
                             [2]=>    string(1) " "
                             [3]=>    string(1) " "
  }
           [3] => array(3) { [1]=>    string(1) " "
                             [2]=>    string(1) " "
                             [3]=>    string(1) " "
  }
}

Eine weitere Anwendung für mehrdimensionale Arrays sind wieder Datenbankzugriffe. Im Beispiel oben haben wir eine Zeile aus einer SQL-Tabelle geladen. Es könnten aber auch mehrere Müllers in der Tabelle sein, und vielleicht müssen wir alle Treffer für eine spätere Auswertung speichern. In diesem Fall könnten wir die Funktion fetch_all(MYSQLI_ASSOC) des mysqli_result Objekts verwenden, und bekommen dann ein Array von Trefferzeilen. Dieses Array ist mit Integer-Zahlen ab 0 geschlüsselt. Die Einträge des Arrays sind aber Ergebniszeilen aus der Datenbank, und werden als Arrays mit den Spaltennamen als Schlüssel geliefert. Hier liegt also ein zweidimensionales Array mit unterschiedlichen Schlüsseltypen vor.

Array aus Datenbankzugriff
<?php
$result = $mysqli->query("SELECT name, vorname, plz, ort, strasse FROM kunden WHERE name='Müller'");
if ($result === FALSE) die "Zugriff auf Kundendatenbank nicht möglich";
$kundenListe = $result->fetch_all(MYSQLI_ASSOC);

foreach ($kundenListe as $kunde) {
    echo "Finde: {$kunde['vorname']} {$kunde['nachname']}<br>";
    echo "       {$kunde['plz']} {$kunde['ort']}, {$kunde['strasse']}<br>";
}
?>

fetch_all erzeugt ein Array mit einem Eintrag pro Treffer. $kundenListe[0] enthält also den ersten gefundenen Kunden mit Nachname Müller, und mit $kundenListe[0]['vorname'] würden Sie seinen Vornamen erhalten.

Dieses Beispiel zeigt Ihnen noch zwei weitere Dinge: Zum einen eine rudimentäre Fehlerbehandlung, die bei einem fehlgeschlagenen Datenbankzugriff das Script mit einer Fehlermeldung abbricht (für eine öffentliche Webseite wäre das nicht ausreichend). Zum anderen, wie Sie alle Einträge eines Arrays in einer Schleife verarbeiten können. Bei foreach handelt es sich um einen PHP-Befehl mit Schlüsselwort. Dieser Befehl durchläuft alle Einträge des angegebenen Arrays ($kundenListe). Pro Eintrag wird zunächst der aktuelle Wert in die angegebene Variable kopiert ($kunde), und danach werden die hinter foreach in geschweiften Klammern stehenden Befehle ausgeführt. Pro Durchlauf der Schleife steht also ein neuer gefundener Kunde bereit. Im Beispiel werden seine Daten zweizeilig mit echo ausgegeben.

Finde: Manuel Müller
       10557 Berlin, Platz der Republik 1b
Finde: Moritz Müller
       12345 Musterstadt, Beispielstraße 47
Finde: Paul Müller
       89999 Bergdorf, Almweg 5

(Alle Namen und Adressen sind frei erfunden)

Weitere Hinweise zum Verwenden von Arrays

Automatische Erzeugung

Sie müssen ein Array nicht ausdrücklich erstellen, um eins zu bekommen.

Arrays aus dem Nichts
<?
   $kunde['name'] = 'Müller';
   $kunde['vorname'] = 'Manuel';
   $kundenListe[] = $kunde;
?>

Wenn die Variablen $kunde und $kundenListe vorher nie verwendet wurden, nimmt PHP ihren Wert bei der ersten Verwendung mit NULL an. Der Versuch, auf NULL einen schreibenden Array-Zugriff auszuführen, hat zum Ergebnis, dass PHP das Array implizit erzeugt und dem gewünschten Schlüssel den Wert zuweist. Das Ergebnis des Beispiels ist also eine Variable $kunde als Array mit zwei String-Schlüsseln und eine Variable $kundenListe, die ein Array mit Schlüssel 0 enthält, wo dieser Kunde gespeichert ist. Das funktioniert auch mit zweidimensionalen Arrayzugriffen:

Ein zweidimensionales Array wie durch Magie
<?php
  $user[0]['name'] = 'Max Müller';
  $user[0]['id'] = 'X17A33';
  $user[1]['name'] = 'Dieter Doll';
  $user[1]['id'] = 'Q233TT';
  var_dump($user);
?>
array(2) {
  [0]=>
  array(2) {
    ["name"]=> string(11) "Max Müller"
    ["id"]  => string(6) "X17A33"
  }
  [1]=>
  array(2) {
    ["name"]=> string(11) "Dieter Doll"
    ["id"]  => string(6) "Q233TT"
  }
}
Empfehlung: Erzeugen Sie Arrays immer, bevor Sie sie verwenden. In einem größeren Programm wissen Sie nicht sicher, ob die Variable, die sie gerade als Array behandeln wollen, nicht bereits anderweit genutzt wurde. Es könnte ein Array mit unerwünschten Inhalten sein. Es könnte auch gar kein Array sein, sondern beispielsweise ein Integer-Wert. Ihr Programm würde dann eine Warnung ausgeben und sich fehlerhaft verhalten.

einzelne Elemente löschen

Mit der Funktion unset können Sie ein Arrayelement löschen.

einzelne Elemente löschen
<?php
  // Element löschen
   unset ($user[1]);
?>

Die Ausgabe zeigt nun, dass das Arrayelement mit dem Index 1 gelöscht wurde, die Indizes 0 und 2 sind jedoch weiterhin vorhanden.

Assoziative Arrays durchlaufen

Wenn Sie ein assoziatives Array durchlaufen, oder ein Array mit Integer-Schlüsseln, die aber nicht fortlaufend sind, interessieren Sie sich bei einem Schleifendurchlauf vermutlich nicht nur für den Wert, sondern auch für den Schlüssel, unter dem er abgelegt ist.

Die foreach-Schleife verfügt über eine erweiterte Form, die Ihnen Schlüssel und Wert liefert. Sie nutzt dafür die Pfeil-Operator Schreibweise, die Sie aus den Array-Literalen kennen:

assoziativen Array mit foreach durchlaufen
<?php
  // Array mit Personalnummer als Schlüssel
  $userListe = [ 1000 => 'Max Müller', 3211 => 'Dieter Doll', 1704 => 'Eckart Engel' ];    

  // Ausgabe aller User mit Personalnummer und Name
  foreach ($userListe as $id => $name) {
    echo "User mit Personalnummer $id hat den Namen $name\n";
  }
?>

Siehe auch