Array / Feld

Arrays werden in PHP auch Felder genannt. Vieles funktioniert ähnlich wie in Javascript.

 

In PHP werden Arrays auch Felder genannt.
Ein Array ist so eine Art Variablensammlung. Es gibt Arrays mit einem numerischen Index. Da bekommt jedes Element eine Zahl zugewiesen, über die man das Element aufrufen kann. Die Indizierung beginnt bei 0.
$tiere[0] wäre das erste Element des Arrays $tiere;

Es gibt assoziative Arrays. Da werden die Elemente über einen String aufgerufen.
$tiere["loewe"] wäre das Element "loewe" des Arrays $tiere; mehr dazu später.

Array / Feld erzeugen

Die folgenden Beispiele zeigen 3 Schreibweisen um ein Array / Feld zu erzeugen.

$artikel[0] wäre der Zugriff auf der erste Element, des Arrays $artikel

Das folgende Array hat den selbstvergebenen Namen medium und 3 Elemente. Es gibt verschiedene Notationen, um ein Array zu erstellen.

1)

$medium[0] = "Buch";
$medium[1] = "DVD";
$medium[2] = "CD";

2)

$medium = array("Buch", "DVD", "CD");

3)

$medium = ["Buch", "DVD", "CD"];

Anzeige des zweiten Elements.

echo $medium[1]; //DVD

Array Element nachträglich hinzufügen

Das Array film wird erstellt, anschließend werden 3 Elemente hinzugefügt. Das letzte Element mit Index 2 wird angezeigt.

$film = ["Guardians of the Galaxy", "Fight Club", "Das fünfte Element", "Avatar", "I-Robot"];
$film[] = "Herr der Ringe";
$film[] = "Matrix";
$film[] = "Valerian";
echo $film[2];

Das fünfte Element

count()

Mit count() kann man die Anzahl der Elemente eines Arrays überprüfen.

4 echo count($werte);

Mit print_r() kann man sich ein Array anzeigen lassen. Eine bessere Möglichkeit bietet die foreach- Schleife.

print_r($film);
    

Array ( [0] => Guardians of the Galaxy [1] => Fight Club [2] => Das fünfte Element [3] => Avatar [4] => I-Robot [5] => Herr der Ringe [6] => Matrix [7] => Valerian )

array_rand()

array_rand() erwartet ein Array und gibt einen zufälligen Index aus.

$zz = array_rand($film);
echo $film[$zz];

I-Robot

array_unshift

Elemente am Anfang des Arrays hinzugefügen mit array_unshift();
Als Argumente werden erwartet: zuerst Arrayname, dann die Inhalte der neuen Elemente mit Kommata getrennt.

Leuchter
Wachskugeln
Buddhas
Keramic
Bilder
Karten
Bücher
<?php
$Optionen = array("Keramic", "Bilder", "Karten", "Bücher");
array_unshift($Optionen, "Leuchter", "Wachskugeln", "Buddhas");
echo $Optionen[0],"<br>";
echo $Optionen[1],"<br>";
echo $Optionen[2],"<br>";
echo $Optionen[3],"<br>";
echo $Optionen[4],"<br>";
echo $Optionen[5],"<br>";
echo $Optionen[6],"<br>";

?>


array_push

Elemente am Ende des Arrays hinzufügen mit array_push();
Als Argumente werden erwartet: zuerst Arrayname, dann die Inhalte der neuen Elemente mit Kommata getrennt. In diesem Beispiel wurde ein 2 dimensionales Array genutzt.

    $tiere["afrika"][0] = "Zebra";
    $tiere["afrika"][1] = "Löwe";

    echo $tiere["afrika"][0];


    array_push($tiere["afrika"], "Elefant", "Gnu", "Antilope"); //hinten anfügen
    echo $tiere["afrika"][2]; //Elefant
 

array_pop()

Am Ende ein Element löschen mit array_pop($Arrayname)

Bücher
6
Karten
<?php
echo array_pop($Optionen),"<br>";
echo count($Optionen),"<br>";
echo $Optionen[5],"<br>";
?>

array_shift()

Am Anfang ein Element löschen

Leuchter
5
Wachskugeln
<?php
echo array_shift($Optionen),"<br>";
echo count($Optionen),"<br>";
echo $Optionen[0],"<br>";
?>

range()

Mit range() wird ein numerisches Array erzeugt mit den Werten der vorgebenen Zahlen. Die beiden Argumente sind: Anfangswert und Endwert. Das erste Argument darf nicht höher sein, als das zweite.

5
6
7
8
<?php
$daten = range(5,8);
echo $daten[0],"<br>";
echo $daten[1],"<br>";
echo $daten[2],"<br>";
echo $daten[3],"<br>";
?>

sort()

Sortieren

Mit sort() wird sortiert, in aufsteigender Reihenfolge sortiert. Bei Strings ist es alphabetisch.

<form>
<Select size=4 >
<?php
$Optionen = array("Keramic", "Bilder", "Karten", "Bücher");
sort($Optionen);
echo "<Option>", $Optionen[0];
echo "<Option>", $Optionen[1];
echo "<Option>", $Optionen[2];
echo "<Option>", $Optionen[3];
?>
</select></form>
Hier wird numerisch sortiert.
100
200
300
500
<?php
$zahlen[0]=200;
$zahlen[1]=300;
$zahlen[2]=500;
$zahlen[3]=100;
sort($zahlen);
echo $zahlen[0],"<br>";
echo $zahlen[1],"<br>";
echo $zahlen[2],"<br>";
echo $zahlen[3],"<br>";
?>

rsort()

siehe PHP Manual rsort()

Mit rsort() wird ein Array rückwärtig, also in absteigender Reihenfolge sortiert. Das höchste Element steht am Amfang. Bei Strings wird rückwärtig alphabetisch sortiert.

$tiere = ["Fliege", "Bär", "Gans", "Affe", "Chamäleon", "Dachs"] ;
rsort($tiere);

Array
(
    [0] => Gans
    [1] => Fliege
    [2] => Dachs
    [3] => Chamäleon
    [4] => Bär
    [5] => Affe
)

usort(array, cmp_function)

Sortieren mit Sortierfunktion

Siehe PHP Manual usort

Mit usort kann man eine Sortierfunktion übergeben, nach der sortiert wird. Der zweite Paramater erwaretet entweder eine namenlose Funktion oder einen Verweis auf eine Funktion. Das bedeutet der Bezeichner der Funktion wird in doppelten Anführungszeichen notiert. Mehr dazu weiter unten.

Das Sortieren mit sort() funktioniert zwar bei numerischen Werten und bei Strings, jedoch kann es Probleme geben wenn in Strings nach numerischen Werten sortiert werden soll. Wie man am dritten Beispiel sieht sortiert sort, die "10" vor der "2". Im ersten Beispiel findet man die Lösung.

Mit strnatcasecmp() kann man Zeichenketten (str1 und str2) nach einer natürlichen Sortierreihenfolge vergleichen. Hier ist 10 größer als 2. Im Gegensatz zu einem herkömmlichen String Vergleich, wo nach dem ersten Zeichen sortiert wird und somit 1 oder 10 kleiner ist als 2.
Folgende Werte werden zurückgegeben.

Wert Bedingung
< 0 str1 ist kleiner als str2
= 0 str1 ist gleich str2
> 0 str1 ist größer als str2

siehe PHP Manual strnatcmp 

siehe PHP Manual strcmp

strnatcmp($a,$b)
Array ( [0] => img_1.jpg [1] => img_2.jpg [2] => img_3.jpg [3] => img_4.jpg [4] => img_5.jpg [5] => img_10.jpg [6] => img_12.jpg ) strcmp($a, $b)
Array ( [0] => img_1.jpg [1] => img_10.jpg [2] => img_12.jpg [3] => img_2.jpg [4] => img_3.jpg [5] => img_4.jpg [6] => img_5.jpg ) sort($zahlen)
Array ( [0] => img_1.jpg [1] => img_10.jpg [2] => img_12.jpg [3] => img_2.jpg [4] => img_3.jpg [5] => img_4.jpg [6] => img_5.jpg )
 
    $zahlen = ["img_5.jpg", "img_3.jpg", "img_2.jpg", 
    "img_10.jpg", "img_1.jpg", "img_12.jpg", "img_4.jpg"];


    usort($zahlen, function ($a, $b) {
        return strnatcmp($a, $b);
    });
    print_r($zahlen);


    usort($zahlen, function ($a, $b) {
        return strcmp($a, $b);
    });
    print_r($zahlen);


    sort($zahlen);
    print_r($zahlen);
         
            

Im nächsten Beispiel wird zuerst ein Array mit Zahlenwerten erzeugt. Um diese Zahlen zu sortieren, würde auch die sort() Funktion genügen. Hier wird jedoch usort() angewendet, weil es mehr Möglichkeiten bietet.

Die Funktion usort() sortiert ein Array nach den Werten seiner Elemente auf Basis der Reihenfolge, die von einer benutzerdefinierten Funktion vorgegeben wird. Das zweite Argument, ist ein Verweis auf diese Funktion. Als Verweis wird in PHP der Name der Funktion in Anführungszeichen notiert.

Die Funktion bekommt jeweils zwei Werte aus dem Array übergeben und muss durch ihr Ergebnis bekannt geben, ob der erste Wert größer ist als der zweite (Ergebnis 1), der erste Wert kleiner ist als der zweite (Ergebnis -1), oder beide Werte gleich sind (Ergebnis 0).

Das lässt sich sehr einfach mit dem Spaceship Operator erzeugen, welcher einen dieser 3 Werte liefert. Siehe die beiden Funktionen sortiere() unten im Beispiel.

Siehe dazu auch den ternären Bedingungsoperator einer if Struktur

1
12
23
24
47
49
56
72
88
90
$zahl = array( 1, 23, 49, 47, 90, 24, 12, 56, 88, 72 );

      /*  function sortiere( $m, $n ) {
          if ( $m == $n ) return 0;
          return ( $m > $n ) ? 1 : -1;
        }*/
        
         function sortiere( $m, $n ) {
          return $m<=>$n;
      }

        usort( $zahl, "sortiere" );

        $u = 0;
          
         foreach ($zahl as $n) {
            echo "$n 
"; }

Mehrdimensionales Array sortieren

function sortier_funktion($a, $b) {
return strnatcasecmp($a["Hits"],$b["Hits"]);
}

Der Trick beim mehrdimensionalen Array ist, man greift nicht auf die Indizies des Arrays zu, sondern sondern auf ein Element innerhalb des verschachtelten Arrays.

20 / Friedel Wachsmann
35 / Dieter Grünschuber
40 / Gunter Freihorn
49 / Walter Gamshuber
54 / Klaus Grabenrot
<?php
$id[0] = array("Name" => "Walter Gamshuber", "Hits" => 49);
$id[1] = array("Name" => "Friedel Wachsmann", "Hits" => 20);
$id[2] = array("Name" => "Gunter Freihorn", "Hits" => 40);
$id[3] = array("Name" => "Dieter Grünschuber", "Hits" => 35);
$id[4] = array("Name" => "Klaus Grabenrot", "Hits" => 54);

usort($id, "sortier_funktion");

function sortier_funktion($a, $b) {
return strnatcasecmp($a["Hits"],$b["Hits"]);
}

$i=0;
while($i<count($id)){
echo $id[$i]["Hits"]." / ".$id[$i]["Name"]."<br>";
$i++;
}
?>


list()

Werte in Variablen schreiben

Mit list(argumente) kann man die Array-Inhalte direkt in Variablen schreiben. Das ist jedenfalls einfacher als Einzelzuweisungen nach dem Schema: $va1= nirva[0]; $va2=nirva[1]; ....etc.

205893 <?php
$nirva = array(20, 58, 93);
list($va1, $va2, $va3)=$nirva;
echo $va1;
echo $va2;
echo $va3;
?>

mb_split()

String zu Array

mb_split()kann aus einem String, ein Array erstellen. Der String sollte mehrere Worte enthalten, die mit einem Trennzeichen aufgeführt sind.

mb_split() hat 3 Paremeter, der dritte Parameter ist optional

  1. regulärerer Ausdruck oder das Zeichen in Anführugnszeichen nach dem getrennt werden soll
  2. der String
  3. optional, Begrenzung auf eine bestimmte Anzahl

Im folgendem Beispiel werden die mit Komma getrennten Begriffe des Strings $geschirr in einzelne Elemente des Arrays $essgeschirr eingefügt.

$geschirr = "Teller, Tasse, Untertasse, Topf, Platte";
$essgeschirr = mb_split(",",$geschirr);

Wenn man nach einem geschützten Zeichen trennen will muss man es maskieren, indem man einen Backslash voran stellt. " \." beispielsweise.

Der optionale dritte Parameter erwartet eine Ganzzahl, welche die Anzahl der Arrayelemente begrenzt. Es bedeutet nicht, dass der letzte Teil des Strings nicht im Array erscheint, sondern diese Worte mit Kommas liegen alle im letzen Array Element. Bei einer Begrenzung mit 3, wäre das letzte Arrayelement "Untertasse, Topf, Platte"


explode()

String zu Array

Eine mb_split() sehr ähnliche Funktion ist explode(). Man erzeugt aus einem Sting ein Array. Hierbei ist das erste Argument das Trennzeichen, das zweite der auszulesende Textstring.

30
02
1879
<?php
$Datum = "30.02.1879";
$Teile=explode(".",$Datum);
foreach($Teile as $Teil){
echo $Teil, "<br>";
}
?>

implode()

Array zu String

implode() ist das Gegenstück zu explode(). Es wird dazu verwendet, die Elemente eines Arrays zu einem Textstring zusammenzufügen. Als erstes Argument wird ein "Trennzeichen" (hier der br Tag) und als zweites Argument der Arrayname angegeben. Wie man sieht ist hier keine Schleife erforderlich.

Sonntag
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Samstag
<?php
$Wochentage=array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
echo implode("<br>",$Wochentage);
?>

in_array()

Siehe PHP Manual

Suchen

Suchfunktion im Array mit in_array. Es wird der Wert true zurückgegeben, wenn der Wert vorhanden ist. Im ersten Argument wird der Suchbegriff angegeben, im zweiten der Arrayname. Der Suchbegriff wird needle genannt das Array haystack. (Nadel im Heuhaufen)

Der Löwe ist da
    $raubtiere = ["Löwe","Tiger","Orka","Adler"];
          if(in_array("Löwe", $raubtiere)){
              echo "Der Löwe ist da";
          }

array_map()

array_map() kann man einsetzen, um auf alle Elemente des Arrays eine Funktion anzuwenden. Bei einem Array mit numerischen Werten könnte man alle Elemente verdoppeln.

    $gehalt = [2000, 1400, 2300, 1000, 25000];
    $gehalt =  array_map("verdoppeln", $gehalt);

array_filter()

Mit array_filter() kann man ein Array filtern. Man definiert eine Funktion mit einem Parameter. Das übergebene Argument wird in der Funktion auf irgendetwas überprüft und gibt dann je nach Überprüfung true oder false zurück.

array_filter() hat 2 Parameter, der erste ist das Array welches gefiltert werden soll, der zweite Parameter ist eine callback Funktion. Alle Elemente werden durchlaufen. Die Elemente welche durch den Filter gefallen sind werden entfernt. Die Schlüssel des ausgebenen Arrays bleiben erhalten. Es werden keine neuen Indizies übergeben.

Im folgendem Beispiel wird true zurück gegeben, wenn die Zahl $a ungerade ist. Alle ungeraden Zahlen werden aus dem Array entfernt.

    function ungerade($a)
    {
        return $a % 2 === 1;
    }

    $zahlen = [1, 2, 3, 4, 5, 6];
    $ungeradeZahlen = array_filter($zahlen, "ungerade");
    var_dump($ungeradeZahlen);

Assoziatives Array

Assoziative Arrays haben anstatt numerischer Indizies sogenannte Schlüssel oder keys. Das sind Strings, über die, die Elemente angesprochen werden.

Achtung Die Schlüssel müssen in doppelten Hochkommata eingefügt sein.

Achtung Die Ausgabe eines Arrayelements sollte nicht innerhalb von Strings erfolgen. Das kann zu Fehlern führen. siehe unten

echo " $tiere["Tiger"] ist ein Raubtier";

echo " ". $tiere["Tiger"];

Hier werden 2 Möglichkeiten vorgestellt ein assoziatives Array zu erstellen.

Zuweisung einzelner Werte
Video
$waren["ArtikelNr"]=1;

$waren["ArtikelName"]="Buzz Lightyear";

$waren["ArtikelGruppe"]="Video";

$waren["Preis"]=10.50;

echo " " . $waren["ArtikelGruppe"];
Arrayfunktion
Video
$sachen = array(

"ArtikelNr"=>1,

"ArtikelName"=>"Clown",

"ArtikelGruppe"=>"Video",

"Preis"=>10.50

);
echo " " . $sachen["ArtikelGruppe"];
in eckigen Klammern
10.5 €
$produkte = [

"ArtikelNr"=>1,

"ArtikelName"=>"Clown",

"ArtikelGruppe"=>"Video",

"Preis"=>10.50

];
echo " ". $produkte["Preis"] ." €";

Ausgabe von Assoziativen Arrayelementen mit echo

Achtung Die Ausgabe eines Arrayelements sollte nicht innerhalb von Strings erfolgen. Das kann zu Fehlern führen.

echo " $tiere["Tiger"] ist ein Raubtier";

Folgende Notationen sind möglich

foreach()

Schleife für indizierte Arrayelemente

Mit einer foreach() Schleife kann man ein Array durchlaufen und alle Arrayelemente anzeigen lassen. Man gibt den Namen des Arrays an. Das ist hier ein zuvor erstelltes Array $film dann folgt nach dem as eine temporäre Variable mit selbst vergebenen Namen. Unter diesem Namen kann man alle Elemente anzeigen lassen.

    foreach ($film as $n) {
        echo "$n <br>";
    }

Guardians of the Galaxy
Fight Club
Das fünfte Element
Avatar
I-Robot
Herr der Ringe
Matrix
Valerian

Schleife für assoziative Arrayelemente

Mit einer foreach() Schleife kann man auch ein assoziatives Array durchlaufen und alle Werte ausgeben lassen. Im folgendem Beispiel wird aus dem Array $produkte der Schlüssel in der temporären Variablen $key und der Wert in der temprären Variablen $wert gespeichert und ausgegeben. $key und $wert sind selbst gewählte Bezeichner.

    foreach ($produkte as $key => $wert) {
        echo "$key, $wert<br>";
    }

ArtikelNr, 1
ArtikelName, Clown
ArtikelGruppe, Video
Preis, 10.5

extract()

Diese benannten Elemente lassen sich einfach in Variablen umwandeln und zwar mit dem Schlüsselwort extract($arrayname).

1Buzz LightyearVideo10.5 <?php
extract($waren);
echo $ArtikelNr;
echo $ArtikelName;
echo $ArtikelGruppe;
echo $Preis;
?>

isset()

Assoziative Arrays lassen sich auch mit isset() überprüfen.

    $allowed_files = [
        'image/jpeg' => 'jpg',
        'image/gif' => 'gif',
        'image/png' => 'png',
        'image/webp' => 'webp'
    ];
   
    if (isset($allowed_files['image/jpeg'])) {
        echo "Der Datentyp ist vorhanden";
    }
Der Datentyp ist vorhanden

Mehrdimensionale Arrays

Mehrdimensionale Arrays muß man sich wie die Spalten und Reihen einer Tabelle vorstellen.

<?php
$Daten[0][0]="Walter Hirsch";
$Daten[0][1]="Glummersbach";
$Daten[0][2]="Am Huberweg 6";
$Daten[1][0]="Hubert Wankelmeier";
$Daten[1][1]="Moosbach";
$Daten[1][2]="Hupfenstr. 20";
?>

Alternative Schreibweise in einem Schritt

Hupfenstr. 20
    $Daten = [
        ["Walter Hirsch", "Gummersbach", "Am Huberweg 6"],
        ["Hubert Wankelmeier", "Moosbach", "Hupfenstr. 20"],
    ];
    echo $Daten[1][2];
      

 

Alternative Schreibweise mittels Arrayfunktion.

Liesel Fuchsheimer <?php
$Adressen[0]=array("Alois Gamshuber","Waldesruh","Pfaffenweg 3");
$Adressen[1]=array("Liesel Fuchsheimer","Stöcklingen","Winklstr. 4");
echo $Adressen[1][0];
?>
Folgende Schreibweise ist auch möglich.
Am Gottesacker 3 <?php
$Mitglieder =array(0=>array("Werner Holdenberg", "Feldhausen", "Am Gottesacker 3"),
1=>array("Bärbel Schlunz", "Glummersbach", "Finkenteich 4")
);
echo $Mitglieder[0][2];
?>
Kombiniert man in mehrdimensionalen Arrays numerische Indicies mit Schlüsseln, hat man eine datensatzähnliche Struktur.
Fichtelheim <?php
$Teilnehmer[0]["Name"]="Walter Gamshuber";
$Teilnehmer[0]["Wohnort"]="Floddenberg";
$Teilnehmer[0]["Strasse"]="Pfeifenstr. 3";
$Teilnehmer[1]["Name"]="Friedel Wachsmann";
$Teilnehmer[1]["Wohnort"]="Fichtelheim";
$Teilnehmer[1]["Strasse"]="Grüner Weg 6";
echo $Teilnehmer[1]["Wohnort"];
?>
Siehe auch foreach Schleife für Array
hier eine weitere Möglichkeit, ein mehrdimensionales Array zu erzeugen
$id[0] = array("Name" => "Walter Gamshuber", "Hits" => 49);
$id[1] = array("Name" => "Friedel Wachsmann", "Hits" => 20);
$id[2] = array("Name" => "Gunter Freihorn", "Hits" => 40);
$id[3] = array("Name" => "Dieter Grünschuber", "Hits" => 35);
$id[4] = array("Name" => "Klaus Grabenrot", "Hits" => 54);
$i = 0;
while ($i < count($id)) {
    echo $id[$i]["Name"] ." - ".  $id[$i]["Hits"]."<br>" ;
    $i++;
}

//foreach Alternative

      foreach ( $id as $data ) {
        foreach ( $data as $key => $val ) {
           echo $key . ": " . $val ." - ";
        }
        echo "<br>";
      }
        
Walter Gamshuber - 49
Friedel Wachsmann - 20
Gunter Freihorn - 40
Dieter Grünschuber - 35
Klaus Grabenrot - 54
foreach
Name: Walter Gamshuber - Hits: 49 -
Name: Friedel Wachsmann - Hits: 20 -
Name: Gunter Freihorn - Hits: 40 -
Name: Dieter Grünschuber - Hits: 35 -
Name: Klaus Grabenrot - Hits: 54 -

 

>

Vordefinierte Variablen und Arrays

Es gibt eine Vielzahl von vordefinierten Variablen und Arrays in PHP, welche Informationen zu verschiednen Themen liefern. Zum Beispiel das Array $_SERVER

$_SERVER

Die superglobale Variable $_SERVER liefert Informationen über den Server und die Ausführungsumgebung. Im Manual von PHP findet man die Schüssel dieses assoziativen Arrays, beispielsweise 'PATH_INFO' liefert den Dateinamen des aktuell ausgeführten Skripts, relativ zum Document-Root. 

echo $_SERVER['PATH_INFO'];

Selbstverständlich kann man so ein vordefiniertes Array auch mit einer foreach() Schleife durchlaufen.

<?php
echo "<table>";
foreach ($_SERVER as $key => $value) {
echo "<tr><td>";
echo $key . "</td><td>" . $value . "</td></tr>";
}
echo "</table>";
?>

Webdesign / PHP / mySQL / Tipps
Copyright © Michael Albers
www.pastorpixel.de