Übersetzungen dieser Seite:
 

Einführung in Arrays

Arrays sind in PHP ein ungemein praktisches Werkzeug. Sie kommen vor allem zum Einsatz, wenn sich Filter, eine Rotation oder eine Auswertung nicht mit den Standard-Funktionen erledigen lässt. Konkrete Beispiele für PHP-Code finden Sie in den jeweiligen Kapiteln, z.B. Rotation, Punkte für Antworten zählen, Items in eine anderen Frage übernehmen.

Arrays

Bei einem Array handelt es sich um eine Liste von Werten (z.B. Zahlen oder Texte). Der folgende PHP-Code erzeugt ein einfaches Array mit drei Listeneinträgen (in diesem Fall Texte): „eins“, „zwei“ und „drei“. Das Array wird anschließend in der Variable $a abgelegt.

// Ein Array anlegen
$a = array('eins', 'zwei', 'drei');

Die damit erzeugte Liste sieht aus wie folgt. Jeder Eintrag in der Liste erhält eine Nummer (den sogenannten Index oder Schlüssel), der i.d.R. bei 0 beginnt. Die Länge dieser Liste ist 3.

Werteinszweidrei
Index 0 1 2

Mit eckigen Klammern ([]) kann man nun auf die einzelnen Einträge im Array zugreifen. Zwischen die Klammern wird einfach der Index geschrieben. Der Befehl count() verrät etwas über die Länge des Arrays.

// Mit Arrays arbeiten
$a = array('eins', 'zwei', 'drei');
html('<p>Länge des Arrays: '.count($a).'</p>');
html('<p>Eintrag mit Index 0: '.$a[0].'</p>');
html('<p>Eintrag mit Index 2: '.$a[2].'</p>');

Der Beispiel-Code erzeugt folgende Ausgabe im Fragebogen:

Länge des Arrays: 3
Eintrag mit Index 0: eins
Eintrag mit Index 2: drei

Tipp: Sie sehen normalerweise nicht unmittelbar, was in einem Array gespeichert wurde. Verwenden Sie die Funktion debug(), um es zu sehen. debug() erzeugt nur dann eine sichtbare Ausgabe, wenn Sie den Fragebogen im Debug-Modus starten (gelber Pfeil Knopf zum Starten des Debug-Modus).

$a = array()
for ($i=0; $i<10; $i++) {
  $a[] = $i + 1;
}
debug($a);  // Nur im Debug-Modus sichtbar!

Arrays Stück für Stück bauen

Besonders praktisch in PHP ist die Möglichkeit, einfach ein Element an das Array anzuhängen. Dazu schreibt man leere eckige Klammern hinter die Array-Variable und dann nach einem Gleichheitszeichen das, was an das Array angefügt werden soll:

// Arrays erweitern
$a = array('eins', 'zwei', 'drei');
$a[] = 'angehängt';
$a[] = 'noch eins';

Dieses Array hätte nun eine Länge von 5 Elementen und sieht wie folgt aus:

Werteinszweidreiangehängtnoch eins
Index 0 1 2 3 4

Besonders hilfreich klingt das zunächst noch nicht. Aber Arrays lassen sich optimal mit Schleifen kombinieren. Im folgenden Beispiel werden die Werte des obigen Arrays angeschrieben - beachten Sie, dass Sie 5 Werte mit einem einzigen Befehl in der Schleife verarbeiten können.

// Arrays und Schleifen
$a = array('eins', 'zwei', 'drei');
$a[] = 'angehängt';
$a[] = 'noch eins';
 
for ($i=0; $i<count($a); $i++) {
  html('<p>Element '.$i.' = '.$a[$i].'</p>');
}

Der PHP-Code erzeugt folgende Ausgabe im Fragebogen:

Element 0 = eins
Element 1 = zwei
Element 2 = drei
Element 3 = angehängt
Element 4 = noch eins

Wenn Ihnen das immer noch nicht besonders hilfreich erscheint, denken Sie bitte an eine Mehrfachauswahl, welche Produkte eine Person üblicherweise einkauft. In einer Folgefrage sollen nun weitere Details zu den angekreuzten Produkten abgefragt werden, z.B. wie häufig man diese kauft. Soweit kein Problem mit getItems() – aber sobald man noch zwei zusätzliche Produkte abfragen möchte, ist die oben geschilderte Funktionalität genau das Richtige.

Array-Funktionen

Nachfolgend werden einige Funktionen zur Arbeit mit Arrays vorgestellt, die im Fragebogen besonders häufig verwendet werden.

Die Funktion shuffle(&array Array) mischt ein Array. Das ist nützlich, wenn man aus einer Liste zufällig einzelne Einträge heraussuchen möchte (s. Rotation).

$a = array('eins', 'zwei', 'drei', 'vier', 'fünf');
shuffle($a);
html('<p>Zwei zufällig ausgesuchte Werte:<br>'. $a[0].' und '.$a[1]. '</p>');

Der Code erzeugt z.B. folgende Ausgabe im Fragebogen:

Zwei zufällig ausgesuchte Werte:
fünf und drei

Im Gegenzug sortiert der Befehl sort(&array Array) das Array. Wenn man (wie im Beispiel) Texte verwendet, dann werden diese alphabetisch sortiert:

$a = array('eins', 'zwei', 'drei', 'vier', 'fünf');
sort($a);
 
for ($i=0; $i<count($a); $i++) {
  html('<p>Eintrag '.$i.' = '.$a[$i].'</p>');
}

Dieser PHP-Code erzeugt folgende Ausgabe im Fragebogen, die Werte wurden hier alphabetisch sortiert:

Eintrag 0 = drei
Eintrag 1 = eins
Eintrag 2 = fünf
Eintrag 3 = vier
Eintrag 4 = zwei

Arrays zu einer Text-Liste zusammenfassen

Der Befehl implode(string Trennzeichen, array Array) verbindet alle Einträge des Arrays zu einem Text. Man kann als ersten Parameter angeben, durch welches Zeichen die Einträge getrennt werden sollen:

$a = array('eins', 'zwei', 'drei', 'vier', 'fünf');
html('<p>Inhalt vorher: '.implode('|', $a).'</p>');
shuffle($a);
html('<p>Inhalt nachher: '.implode('|', $a).'</p>');
html('<p>Inhalt mit Komma: '.implode(', ', $a).'</p>');

Der Code erzeugt z.B. folgende Ausgabe im Fragebogen:

Inhalt vorher: eins|zwei|drei|vier|fünf
Inhalt nachher: vier|zwei|eins|drei|fünf
Inhalt mit Komma: vier, zwei, eins, drei, fünf

Array durchsuchen

Der Befehl in_array(mixed Element, array Array) überprüft, ob ein Element in einem Array vorhanden ist. Das ist vor allem dann nützlich, wenn man unterschiedliche Fragen stellt in Abhängigkeit von Array-Elementen.

$a = array(1, 2, 7, 8); // Liste mit Zahlen (das könnten ebenso die angekreuzten Items sein)
if (in_array(2, $a)) {
  question('AB01');
}
if (in_array(3, $a)) {
  question('AB02');
}

Mengenlehre

Sie möchten die Items anfragen, die in einer vorhergehenden Frage angekreuzt wurden – keinesfalls aber die Items 4 und 5? Dann können Sie mit array_diff() einfach die Items 4 und 5 aus der Liste entfernen.

// Ausgewählte Items ermitteln
$auswahl = getItems('AB01', 'min', 2);
// Die Items 4 und 5 aus der Liste entfernen, falls vorhanden
$never = array(4, 5);
$items = array_diff($auswahl, $never);
// Die Folgefrage stellen
question('AB02', $items);

Ähnlich hilfreich sind array_merge() (Vereinigungsmenge) und array_intersect() (Schnittmenge).

Assoziative Arrays

Gewöhnliche Arrays sind einfach eine Liste von Elementen, wobei jedes Element eine eindeutige Position hat. Diese Position wird durch den Index (0, 1, u.s.w) bezeichnet. Der Index wird auch als Schlüssel bezeichnet.

Bei assoziativen Arrays gibt man die Schlüssel explizit vor. In PHP wird die Zuordnung eines Wertes zu einem Schlüssel durch die Zeichenfolge => erreicht. Man kann als Schlüssel natürlich den bekannten Index verwenden – die Arrays $a und $b im folgenden Beispiel sind gleich.

$a = array(
  'eins',
  'zwei',
  'drei'
);
 
$b = array(
  0 => 'eins',
  1 => 'zwei',
  2 => 'drei'
);

Aber als Schlüssel sind nicht nur Zahlen, sondern auch Strings erlaubt. Im folgenden Array wird damit z.B. für eine Reihe von Wissensfragen (vom Typ „Auswahl“) die korrekte Antwort (Antwortcode) definiert.

$c = array(
  'AB01' => 2,
  'AB02' => 1,
  'BB01' => 5
);

Um das Element eines assoziativen Arrays auszulesen, wird der Schlüssel einfach in eckigen Klammern angegeben:

$x = $c['AB01'];
// oder auch
$key = 'AB01';
$x = $c[$key];

Besonders hilfreich für die Arbeit mit assoziativen Arrays ist die PHP-interne Funktion array_keys() und die FOR-Schleife foreach. Der folgende PHP-Code prüft für mehrere Fragen, ob die korrekte Antwort gegeben wurde (Punkte für Antworten zählen).

$c = array(
  'AB01' => 2,
  'AB02' => 1,
  'BB01' => 5
);
foreach ($c as $label=>$correct) {
  if (value($label) == $correct) {
    html('<p style="color: green">Die Antwort auf '.$label.' war korrekt.</p>');
  } else {
    html('<p style="color: red">Die Antwort auf '.$label.' war falsch.</p>');
  }
}

Eine reguläre FOR-Schleife kann man durch Einsatz von array_keys() verwenden:

$c = array(
  'AB01' => 2,
  'AB02' => 1,
  'BB01' => 5
);
$fragen = array_keys($c);
for ($i=0; $i<count($fragen); $i++) {
  $label = $fragen[$i];
  $correct = $c[$label];
  if (value($label) == $correct) {
    html('<p style="color: green">Die Antwort auf '.$label.' war korrekt.</p>');
  } else {
    html('<p style="color: red">Die Antwort auf '.$label.' war falsch.</p>');
  }
}

Weitere Array-Funktionen

Es gibt noch eine ganze Reihe weiterer Befehle für Arrays. Eine vollständige Liste finden Sie im offiziellen PHP Manual: Array-Funktionen.

de/create/array.txt · Zuletzt geändert: 16.01.2015 11:50 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki