PHP Tutorial – Schritt 17: Arrays – Teil 2

Und weiter gehts mit den Arrays in unserem PHP Tutorial. Finden wir doch mal raus, was noch so alles damit möglich ist:

|

Doppelte Einträge löschen

Manchmal kann es gewünscht sein, dass man seine Daten auf doppelte Einträge prüfen muss. Bei einem Array kann man mit einem simplen Befehl diese Prüfung vornehmen und auch gleich löschen lassen:

<?php

# Array aufbauen und befüllen
$wochentag[] = "Montag";
$wochentag[] = "Dienstag";
$wochentag[] = "Mittwoch";
$wochentag[] = "Dienstag";
$wochentag[] = "Montag";

# Doppelte Elemente entfernen
$bs = array_unique ( $wochentag );

# Testausgabe aller Array Elemente mit Index
echo "<pre>";
print_r ( $bs );

?>

Der Befehl “array_unique()” entfernt alle doppelten Einträge aus einem Array. Außerdem habe ich dir gleich in diesem Beispiel gezeigt, wie du jederzeit dein komplettes Array anzeigen lassen kannst (inkl. der jeweiligen Indexnummer).

|

Mehrdimensionale Arrays

Bis jetzt hatten wir ja “nur” gelernt, wie man ein Array mit einer Ebene erstellt. Sprich, wir hatten unseren Büroschrank mit unseren Fächern, denen wir selbst einen Namen geben konnten und in ein Fach hatten wir eine x-beliebige Anzahl an Zetteln abgelegt. Wahlweise sogar mit Kürzel.

Aber was wenn ich dir nun sage, dass wir aus den Zetteln eigentlich jeweils einen Ordner mit noch mehr Zetteln machen könnten?

Schauen wir uns doch mal ein Beispiel dazu an:

<?php

# Array aufbauen
$auto = array(
  array("M3", "BMW"),
  array("A1", "Audi"),
  array("Colt", "Mitsubishi")
);

//Daten ausgeben
echo "Type: ".$auto [0][0];
echo " Marke: ".$auto [0][1];

?>

Was haben wir hier gemacht?

Anstatt nur ein eindimensionales Array aufzubauen (wir erinnern uns):

$marke = array("BMW","Audi");

Bauen wir ein Array im Array auf, das dabei gleich den Typ und die Marke zulässt:

$auto = array(
  array("M3", "BMW"),
  array("A1", "Audi"),
  array("Colt", "Mitsubishi")
);

Da wir bei keinem Array ein Kürzel mitschicken, können wir auf das Array per Index (0, 1, 2…) zugreifen:

echo " Marke: ".$auto [0][1];

Dabei steht die erste Position (0) für das Unterelemente des Hauptarrays stehen (in diesem Fall ist

  • 0 = jenes Array mit M3/BMW
  • 1 = das Array mit A1/Audi und
  • 2 = das Array mit Colt/Mitsubishi

und die zweite Ziffer (in diesem Fall eine “1”) steht jeweils für den ersten (0) oder den zweiten (1) Index des Unterarrays. Also 0 = M3, 1 = BMW.

Folglich steht die Ausgabe

echo $auto [2][0];

für…

die Ausgabe >M3<

Das ist leider falsch, fange nochmal von vorne an. Es ist wichtig, dass du die Funktionsweise verstehst.

die Ausgabe >BMW<

Das ist leider falsch, fange nochmal von vorne an. Es ist wichtig, dass du die Funktionsweise verstehst.

die Ausgabe >A1<

Das ist leider falsch, fange nochmal von vorne an. Es ist wichtig, dass du die Funktionsweise verstehst.

die Ausgabe >Audi<

Das ist leider falsch, fange nochmal von vorne an. Es ist wichtig, dass du die Funktionsweise verstehst.

die Ausgabe >Colt<

Richtig. Du sprichst nämlich das zweite Array mit dem ersten Eintrag an 🙂 Prima!

die Ausgabe >Mitsubishi<

Das ist leider falsch, fange nochmal von vorne an. Es ist wichtig, dass du die Funktionsweise verstehst.

Jetzt wirds noch etwas komplizierter…

|

Mehrdimensionale, assoziative Arrays

Den ganzen Spaß kann man nämlich auch wieder mit seinen Kürzeln versehen, sprich wir arbeiten nicht mehr mit dem Index (0, 1, 2…) sondern mit unseren eigenen “Karteireitern”. In diesem Fall benennen wir diese “Type” und “Marke”:

<?php

# Array aufbauen
$autos = array();

# Array befüllen
$autos[] = array("Type"=>"M3",
                       "Marke"=>"BMW");

$autos[] = array("Type"=>"A1",
                       "Marke"=>"Audi");

$autos[] = array("Type"=>"Colt",
                       "Marke"=>"Mitsubishi");


//Daten ausgeben
echo "Type: ".$autos[0]["Type"];
echo "Marke: ".$autos[0]["Marke"];

?>

Um z.B. das zweite Array (A1/Audi) anzusprechen, brauchst du somit nur den HauptIndex hochrechnen (+1):

echo "Type: ".$autos[1]["Type"];
echo "Marke: ".$autos[1]["Marke"];

Und das beste daran ist… man kann diese Dimensionen ohne weiteres erweitern, z.B.

$auto= array();
$auto["BMW"]["Marke"] = "BMW";
$auto["BMW"]["Type"] = "M3";
$auto["BMW"]["Baujahr"] = "1998";
$auto["BMW"]["Reifen"] = "4";


//Daten ausgeben
echo "Type: ".$auto["BMW"]["Baujahr"];

Raucht dir jetzt auch der Kopf? Verständlich… solche Arrays sind sehr mächtig und am Anfang wirken sie sehr komplex, aber Übung macht bekanntlich den Meister. Und deshalb soll man auch nichts dem Zufall überlassen 😉