x

Einloggen

Hast du noch keinen Account? Jetzt registrieren!

PHP Tutorial: Lektion 4 - Arrays

Hiho und weiter geht's.
Dies ist der dritt-letzte Schritt, bevor wir mit der Objektorientierung beginnen. Die Frage: Was ist ein Array?

Ein Array ist ein "Container" für Werte. Da PHP schwach typisiert ist, können wir sogar jeden beliebigen Wert in ein Array schreiben.
Ein Array deklarieren wir folgendermaßen:

<?php
$myArray = array();
?>


$myArray ist nun ein leeres Array. Bei Bedarf kann es bei der Deklination bereits befüllt werden:

<?php
$a = 3;
$myArray = array(1, 2, $a);
?>


$myArray beinhaltet nun die Werte 1, 2 und 3. Jetzt aber kommt das tückische:
Jedes Array hat einen Index um auf die Werte zugreifen zu können. Dieser beginn immer bei 0.
Ein Array mit 3 Elemente hat also die Indezes 0, 1 und 2.

<?php
$myArray = array('foo', 'bar');
echo $myArray[1];
?>


Das obige Beispiel erzeugt die Ausgabe "bar". Und wir sehen direkt, wie man die Elemente anspricht: mit eckigen Klammern.
Natürlich können wir auch jederzeit Werte ändern:

<?php
$myArray = array('foo', 'bar');
$myArray[1] = 'test';
echo '<pre>';
print_r($myArray);
echo '</pre>';
?>


$myArray[1] beinhaltet nun den Wert "test". D.h. wir könnten unser Array vom Anfang array(1, 2, 3) auch so definieren:

<?php
$myArray[0] = 1;
$myArray[1] = 2;
$myArray[2] = 3;
?>


Das Ergebnis ist exakt dasselbe.

An dieser Stelle will ich aber kurz unterbrechen um zwei der wichtigsten Debugging-Befehle an zu führen: var_dump() und print_r(). var_dump() gibt schlichtweg Werte (oder Variablen) und deren Typ aus. Wie print_r() kann var_dump() dabei rekursiv vorgehen (siehe unten). Der Unterschied ist, dass print_r() auf die Ausgabe des Typs verzichtet und somit besser zu lesen ist. Zudem ist print_r() nur für Arrays und Objekte geeignet. Was Objekte genau sind, lernen wir später noch.


Also zurück zu unseren Arrays. Wir wissen jetzt, wie wir Arrays deklarieren, Werte auslesen und zuweisen.
Nun können wir aber auch alphanumerische Indezes vergeben:

<?php
$myArray['foo'] = 'bar';
?>


Die Entsprechung wäre:

<?php
$myArray = array('foo' => 'bar');
?>


Cool, oder? Aber es geht noch cooler, kommen wir zu mehr dimensionalen Arrays:

<?php
$arrayOne	= array('foo', 'bar');
$x		= 'bla';
$y		= 'test';
$myArray	= array($arrayOne, $x => $y);
?>


Nun befindet sich im Index 0 von $myArray der Wert des Arrays $arrayOne.
Und bei Index "bla" finden wir den String "test".
Lasst euch das Array mal mit print_r ausgeben und ihr erhaltet folgende Ausgabe:

Array
(
    [0] => Array
        (
            [0] => foo
            [1] => bar
        )

    [bla] => test
)

Zugriff erhaltet ihr wie folgt:

<?php
echo $myArray[0][1]; // erzeugt "bla"
?>


Ihr könnt beliebig viele Arrays in einander verschachteln.
Bevor's aber für euch in den Feierabend geht, hier noch einige nützliche Funktionen:

<?php
$myArray	= array('test1', 'test2');
$myArray[]	= 'test3';	// Erstellt den Eintrag "test3" am Ende des Arrays
?>


<?php
$myArray	= array('test1', 'test2');
echo count($myArray);	// gibt die Anzahl der Einträge aus
?>


Aufgepasst: count() ist (wie die folgenden Beispiele auch) eine Funktion. Lasst euch nicht irritieren und nehmt das einfach mal so hin. Zu Funktionen kommen wir nämlich noch in Lektion 6.

<?php
$myArray	= array('test1', 'test2');
sort($myArray);	// sortiert das Array
?>


<?php
$myArray	= array('test1', 'test2');
asort($myArray);	// sortiert das Array, behält aber die Index-Assoziationen bei
?>


<?php
$myArray	= array('test1', 'test2');
$isInArray	= in_array('test2', $myArray);	// prüft ob ein Eintrag mit dem Wert "test2" in $myArray vorhanden ist, gibt boolschen Wert zurück
?>


Na dann: Viel Spaß! :)

Für Profis und interessierte:
PHP's Sortierfunktionen haben einen boolschen Erfolgswert als Rückgabe. Warum das so ist, keine Ahnung. Auf jeden fall können wir daraus schließen, dass das Array als Referrenz übergeben wird. D.h., solltet ihr euer Array noch brauchen, erstellt vorher eine Kopie davon.
Da es sich um kein Objekt handelt, reicht hier:

<?php
$array2	= $array1;
?>


Für alle Nicht-PHP'ler:
Da PHP eine interpretierte Sprache ist, sind Arrays hierbei lediglich virtuelle Konstrukte und von ihrer Dynamik her eher mit Listen zu vergleichen als mit den Arrays der Hochsprachen.
Dieses Phänomen werden wir noch häufiger beobachten können, so ist z.B. Polymorphie in PHP schlicht hinfällig.
2630 Mal gelesen
+2
24. Jun 2010, 10:34

Kommentare

(0)
RSS

Kommentieren

Fett Kursiv Unterstrichen Durchgestrichen   Link Zitieren Code
Ich bin mit den Nutzungsbedingungen einverstanden.
Zukünftige Kommentare zu diesem Beitrag abonnieren (abbestellbar).
 
Bitte klicke jetzt auf den Bestätigungslink in deiner E-Mail.