» Startseite
» Newsübersicht
» Kontakt
» Impressum

» Forum
» Gästebuch

» Einführung PHP
   » Anfang
   » Erste Schritte
   » Variablen
   » if-Anweisung
   » Log. Operatoren
   » Übung
   » Dateien
   » Schleifen
   » Array
   » Dateien Teil 2
   » Datum & Zeit
   » Mail Funktion
   » Sessions

» Einführung MySQL

PHP-Einfach.de

Counterdienst:
Digicount.de
Unser werbefreier Counter- und Statistikdienst

Array und foreach

Ein Array ist eine Variable, in der man mehrere Werte speichern kann.

Bisher konnte jede Variable nur einen Wert speichern, in einem Array können wir beliebig viele Werte speichern, auch von unterschiedlichen Typen. So kann ein Array z.B. eine Zeichenkette (String/Text), eine Ganzzahl und eine Zahl mit Kommastellen enthalten, und auf jeden dieser Werte kann man separat zugreifen.
Aber ein Array kann noch deutlich mehr.

Das hört sich jetzt alles recht kompliziert an, ist aber ganz einfach, darum hier ein Beispiel:
<?php
$wochentage = array("Sonntag","Montag","Dienstag",
"Mittwoch","Donnerstag","Freitag","Samstag");
?>
Einem Array wird ganz normal ein Variable-Namen zugeordnet, hier wochentage, allerdings erfolgt die Zuweisung der Daten nicht einfach durch das Gleichheitszeichen, sondern danach kommt noch der Befehl: array();.
In diesem Befehl sind jetzt die verschiedenen Werte gespeichert, bei uns die ausgeschriebenen Wochentage.

Das Zugreifen auf solch einen Wert ist auch relativ simpel:
<?php
echo $wochentage[1];
?>
Ausgabe: Montag

Wir geben zuerst wieder den Variable-Namen (wochentage) an und danach das Element bzw. den Wert, auf das wir zugreifen möchten.
Ein Array hat dabei die enthaltenen Werte durchnummeriert, und fängt bei 0 an zu zählen.
Also mit $wochentage[0]; würden wir den Wert Sonntag erhalten, Montag hat die Nummer (bzw. den Index) 1 und so weiter.


Bei großen Arrays wird es natürlich irgendwann umständlich, zu wissen, welche Nummer/Index zu welchem Wert gehört, darum gibt es assoziative Arrays.
Das heißt, man kann für einen Wert einen Schlüssel/Key zuweisen, dies kann z.B. eine andere Zeichenkette sein.
Die Zuweisung erfolgt per: =>
<?php
$wochentage = array(
"so" => "Sonntag",
"mo" => "Montag",
"di" => "Dienstag",
"mi" => "Mittwoch",
"do" => "Donnerstag",
"fr" => "Freitag",
"sa" => "Samstag");
?>
Dies ist wieder ein Array mit unseren Namen der Wochentage. Dabei wurde dem Schlüssel so der Wert Sonntag zugewiesen, dem Schlüssel mo dem Wert Montag.
Der Vorteil ist, dass man jetzt bequemer auf das Array zugreifen kann:
<?php
echo $wochentage["mo"];
?>
Ausgabe: Montag

Anstatt jetzt die Nummer/Index des Elementes anzugeben, gibt man hier den Schlüssel für das Element an, also so für Sonntag, mo für Montag und sa für Samstag.

Selbstverständlich kann man nachträglich auch Werte in einem Array verändern:
<?php
$wochentage["mo"] = "Monday";
echo $wochentage["mo"];
?>
Ausgabe: Monday

Das selbe gilt für Arrays mit Nummer/Indexen.


Ein weiterer Vorteil ist, dass man einem Array neue Werte hinzufügen kann, diese Werte könnten z.B. aus einer Datenbank stammen.
Das ganze Funktioniert so:
<?php
$mitarbeiter = array("Bob","Peter");
$mitarbeiter[] = "Lisa";

echo $mitarbeiter[2];
?>
Ausgabe: Lisa

Mit $mitarbeiter[] wird automatisch ein neues Element in unserem Array erstellt, und diesem wird der Wert Lisa zugewiesen.

Wir könnten unser Array sogar so erstellen:
<?php
$mitarbeiter = array();
$mitarbeiter[] = "Bob";
$mitarbeiter[] = "Peter";
$mitarbeiter[] = "Lisa";
?>
Hier wird zuerst ein leeres Array erstellt und danach werden die Mitarbeiter hinzugefügt.

Mit assoziativen Arrays funktioniert dies zu ähnlich, aber wir müssen den Schlüssel mit angeben:
<?php
$mitarbeiter = array(
"Bob" => "Bob Meier",
"Peter" => "Peter von Hausen");
$mitarbeiter["Lisa"] = "Lisa Müller";

echo $mitarbeiter["Lisa"];
?>
Ausgabe: Lisa Müller

Wenn der Schlüssel schon vergeben wurde, dann wird der Wert für die Schlüssel überschrieben.


Anzahl der Elemente

Wenn wir in einem Array dynamisch neue Elemente hinzufügen können, dann ist es sehr wichtig zu wissen, wie viele Elemente das Array überhaupt enthält, dies funktioniert mit: count($names_des_array);:
<?php
$mitarbeiter = array("Bob","Peter");

echo count($mitarbeiter);
?>
Ausgabe: 2

Wir erhalten als Ausgabe 2, denn in dem Array sind 2 Mitarbeiter gespeichert, der letzte Index ist allerdings 1, weil bei 0 angefangen wird zu zählen.
Um den letzten Eintrag auszugeben, müssen wir von dem Wert einfach 1 abziehen.

Elemente ausgeben

Zum Ausgeben aller Elemente in einem Array benutzt man gewöhnlich eine Schleife, dies kann eine for oder eine while Schleife sein:
<?php
$mitarbeiter = array("Bob","Peter","Lisa");

echo "For-Schleife: <br>";
for($i=0; $i < count($mitarbeiter); $i++)
   {
   echo $mitarbeiter[$i]."<br>";
   }

echo "<br> While-Schleife: <br>";

$i = 0;
while($i < count($mitarbeiter))
   {
   echo $mitarbeiter[$i]."<br>";
   $i++;
   }
?>
Beide Varianten funktionieren einwandfrei, aber es gibt noch eine 3. Schleife: foreach
<?php
$mitarbeiter = array("Bob","Peter","Lisa");

echo "Foreach-Schleife: <br>";
foreach($mitarbeiter AS $name)
   {
   echo $name."<br>";
   }
?>
Im Schleifenkopf definieren wird, dass die Werte in $name gespeichert werden soll. Unter dieser Variable können wir dann innerhalb der Schleife auf den jeweiligen Namen des Mitarbeiters zugreifen.

Suchen & Sortieren

Ein weiteres Feature ist, dass wir ein Array durchsuchen und sortieren können.
Zuerst die Suchfunktion, dies geht mit in_array($suche,$array);:
<?php
$mitarbeiter = array("Bob","Peter","Lisa");

if(in_array("Bob",$mitarbeiter))
   {
   echo "Der Name Bob ist in dem Array enthalten";
   }
?>
Hier überprüfen wir, ob Bob in dem Mitarbeiter-Array vorhanden ist, wenn ja, gibt die Funktion true zurück, und ein Text wird ausgegeben (das Bob in dem Array vorhanden ist).

Das war auch schon das Gröbste zum Suchen, jetzt das Sortieren. Oft herrscht in so einem Array 'Chaos', dass z.B. die Mitarbeiter wild hinzugefügt wurden. Möchte man jetzt eine alphabetische Liste der Mitarbeiter ausgeben, dann muss man das Array zuerst sortieren. PHP bietet dafür viele Möglichkeiten.

Möchte man die Werte sortieren, verwendet man die Funktionen asort oder arsort, wobei asort eine aufsteigende Reihenfolge (a,b,c,d) liefert und arsort eine absteigende (d,c,b,a).

Beispiel:
<?php
$mitarbeiter = array("Klaus","Arnie","Willi");

//Array sortieren
asort($mitarbeiter);


//Array ausgeben
echo "Foreach-Schleife: <br>";
foreach($mitarbeiter AS $name)
   {
   echo $name."<br>";
   }
?>
Hier wird per asort() das Array in aufsteigender Reihenfolge sortiert und danach mit foreach ausgegeben.

Um die Schlüssel (mit deren Werte), zu sortieren, verwendet man ksort oder krsort. Beispiel:
<?php
$mitarbeiter = array(
"Zabel" => "Klaus",
"Meier" => "Arnie",
"Brand" => "Willi");

//Array sortieren
ksort($mitarbeiter);


//Array ausgeben
echo "Foreach-Schleife: <br>";
foreach($mitarbeiter AS $name)
   {
   echo $name."<br>";
   }
?>

Mehrdimensionale Arrays

In einem Array kann man ein weiteres Array, und in diesem Array wieder ein Array speichern, und so weiter. Solche Arrays nennt man dann mehrdimensionale Arrays.
Die Dimension gibt dabei an, wie Tief diese Verschachtelung geht. Ein normales Array wäre ein 1-dimensionales Array, wenn jetzt in dem Array ein weiteres Array gespeichert ist, ist dies ein 2-dimensionales Array.

Dafür hier ein Beispiel:
<?php
$mitarbeiter = array(
  array("Klaus", "Zabel"),
  array("Arnie", "Meier"),
  array("Willi", "Brand")
);

//Daten ausgeben
echo "Vorname: ".$mitarbeiter[0][0];
echo " Nachname: ".$mitarbeiter[0][1];
?>
Ausgabe: Vorname: Klaus Nachname: Zabel

Wie wir sehen, gibt man jetzt nicht nur einen Index an, sondern zwei. Der erste Index gibt an, welchen Mitarbeiter wir aus der Liste haben möchte, und der zweite Index ob wir den Vornamen, oder den Nachnamen ausgeben möchten.

Dies geht natürlich auch mit assoziativen Arrays und der 'anderen' Schreibweise:
<?php
$mitarbeiter = array();
$mitarbeiter[] = array("Vorname"=>"Klaus",
                       "Nachname"=>"Zabel");

$mitarbeiter[] = array("Vorname"=>"Arnie",
                       "Nachname"=>"Meier");

$mitarbeiter[] = array("Vorname"=>"Willi",
                       "Nachname"=>"Brand");


//Daten ausgeben
echo "Vorname: ".$mitarbeiter[0]["Vorname"];
echo " Nachname: ".$mitarbeiter[0]["Nachname"];
?>
Da wir jetzt in einem normalem Array ein assoziatives Array (also eins mit Schlüssel) speichern, müssen wir als zweiten Wert auch den Schlüssel für Vor/Nachname angeben.

Dies geht natürlich auch mit noch mehr Dimensionen, z.B. so:
<?php
$mitarbeiter = array();
$mitarbeiter["Klaus"]["Vorname"] = "Klaus";
$mitarbeiter["Klaus"]["Nachname"] = "Zabel";
$mitarbeiter["Klaus"]["Kinder"][] = "Klaus-Junior";
$mitarbeiter["Klaus"]["Kinder"][] = "Kind2";






//Daten ausgeben
echo "Vorname: ".$mitarbeiter["Klaus"]["Vorname"];
echo " Nachname: ".$mitarbeiter["Klaus"]["Nachname"];
echo "<br> Er hat ";
echo count($mitarbeiter["Klaus"]["Kinder"])." Kinder";

//Ausgabe von Kind1:
//$mitarbeiter["Klaus"]["Kinder"][0];

echo "<br> Kinder: <br>";
foreach($mitarbeiter["Klaus"]["Kinder"] AS $name)
   {
   echo $name."<br>";
   }
?>
Dies ist schon etwas schwerer zu verstehen, aber wenn man es verstanden hat, sollte es eigentlich keine weiteren Fragen zu Arrays geben.

Also zuerst haben wir wieder unser Array mit dem Mitarbeiter Klaus. Dabei benutzen wir diesmal gleich ein assoziatives Array.
Für Klaus wurde jetzt der Vorname und der Nachname gespeichert, dies sollte ja noch bekannt sein.
Unter dem Schlüssel Kinder fügen wir jetzt ein weiteres Array hinzu, wobei jedes Element dieses Arrays den Namen eines Kindes von ihm enthält.
Dieses Array mit den Kindernamen können wir ganz normal per foreach ausgeben.


Das war's auch schon was man über Arrays wissen muss.

Jetzt können wir Dateien komplett ausgeben.

Autor Andavos

News

Forum

Newsletter


© PHP-Einfach.de 2003 - 2007