Durch Verwendung des leeren Arrayoperators wird an ein Array ein Element angehängt. In Code:
$avar[] = "neues element";
In PHP 4 kann man mit der Funktion array_push() auch mehrere Elemente gleichzeitig an ein Array anfügen.
Durch Verwendung eines Index kann man ein Element an einer bestimmten Stelle in einem Array ansprechen. Der Index kann numerisch oder ein String sein:
$avar[1] = "Element mit dem Index 1"; $avar["bla"] = "Element mit dem Index 'bla'";
Ein Array enthält $anz = count($avar) viele Elemente. Man kann diese Elemente mit einer for -Schleife aufzählen, falls die Indizes numerisch-zusammenhängend sind:
$avar = array('rot', 'gelb', 'blau', 'schwarz');
$anz = count($avar);
for ($i=0; $i<$anz; $i++) {
printf("i: %d avar[%d] = %s<br>\n", $i, $i, $avar[$i]);
}
Für assoziative Arrays ist dieses Konstrukt besser geeignet:
if (isset($avar) && is_array($avar)) {
foreach ($avar as $k => $v) {
printf("k=%s v=%s<br>\n", $k, $v);
}
}
In PHP3 hat man oft die folgende Syntax verwendet, die inzwischen veraltet (aber noch funktionsfähig) ist:
if (isset($avar) && is_array($avar)) {
reset($avar);
while (list($k, $v) = each($avar)) {
printf("k=%s v=%s<br>\n", $k, $v);
}
}
Es macht Gebrauch von den Funktionen reset() um den internen Positionszeiger eines Arrays zurückzusetzen, list() um einen Zuweisungskontext für ein Wertepaar $k und $v zu erzeugen und each() um den Schlüssel ( key , k ) und den Wert ( value , v ) an der aktuellen Position des Arrays auszulesen.
Von der Anwendung der veralteten und defekten Funktionen next() , prev() und current() ist in diesem Zusammenhang abzuraten, da sie bei Arrays mit Nullwerten falsche Ergebnisse liefern. Diese Schleife wird nur die Werte -2 und -1 ausgeben, da hier der Wert 0 nicht vom Feldende unterschieden werden kann:
$avar = array(-2, -1, 0, 1, 2);
for (reset($avar); $v = current($avar); next($avar)) {
printf("v = %d<br>\n", $v);
}
Mit unset() kann man sowohl Variablen (Strings, ganze Arrays etc.) als auch einzelne Elemente eines Arrays löschen:
$array = array('P', 'H', 'P');
// Löscht das 'H'
unset($array[1]);
// Löscht das ganze Array
unset($array);
Durch das Löschen einzelner Einträge entstehen Lücken im Index des Arrays (d.h. $array[1] greift ins Leere); die Array-Funktionen selbst (wie z.B. foreach() oder each() ) stört dies jedoch nicht. Benötigt man dennoch ein Array mit fortlaufendem Index für direkten Zugriff, muss man es aus den verbleibenden Elementen neu erstellen:
// Array mit fortlaufendem Index erzeugen $array = array_values($array);
Weiterhin kann man auch mit array_splice() Teile eines Arrays entfernen, und dabei automatisch einen zusammenhängenden numerischen Index erzeugen lassen (falls das benötigt wird):
// In $array ab Index 1 ein Element durch nichts ersetzen array_splice($array, 1, 1);
Das lässt sich am einfachsten an einem kleinen Beispiel zeigen:
$array = array(
"foo" => array ("a", "b"),
"bar" => array ("c", "d")
);
print($array["foo"][0]); // gibt "a" aus.
print($array["bar"][1]); // gibt "d" aus.
PHP stellt eine Reihe von vordefinierten Sortierfunktionen zur Verfügung. Wenn diese nicht ausreichen, kann man mit Hilfe der Funktion usort() nach beliebigen Kriterien sortieren lassen. Der Funktion muss eine Vergleichsfunktion und das zu sortierende Array als Parameter mit übergeben werden.
Das nachfolgende Beispiel sortiert ein Array von Paaren alphabetisch nach dem 2. Element.
kris@valiant:~ > ./php
<?php
$a = array(
array(0, "Schmidt"),
array(2, "Albert")
);
function cmp($a, $b) {
printf("type a = %s type b = %s\n", gettype($a), gettype($b));
if ($a[1] == $b[1]) return 0;
return ($a[1] > $b[1])?1:-1;
}
usort ($a, "cmp");
foreach($a as $k => $v)
printf("k = %s v[0] = %s v[1] = %s\n", $k, $v[0], $v[1]);
?>
X-Powered-By: PHP/4.0b5-dev
Content-type: text/html; charset=iso-8859-1
type a = array type b = array
k = 0 v[0] = 2 v[1] = Albert
k = 1 v[0] = 0 v[1] = Schmidt
kris@valiant:~ >
Weiterhin gibt es die Funktion array_multisort() , die - gefüttert mit einem passenden (eindimensionalen) "Sortierarray" - mehrdimensionale Arrays nach beliebigen Dimensionen ordnen kann.
foreach($a as $v) $s[] = $v[1]; // [1] = Dimension zur Sortierung array_multisort($s, SORT_ASC, $a); // ASC = auf-, DESC = absteigend
Durch Einfügen weiterer "Sortierarrays" ( $s ) vor dem "Nutzarray" $a kann man auch nach mehreren Kriterien gleichzeitig sortieren lassen. Dabei kann nach jedem "Sortierarray" die Sortierrichtung und -art neu bestimmt werden.
Seit PHP Version 4.0.1 gibt es die Funktion array_unique() , um doppelte Einträge in Arrays zu eliminieren.
Anmerkung: array_unique() behält die Indizes des Original- Arrays bei. Um auf die Elemente des Arrays mit fortlaufenden numerischen Indizes von 0 bis count()-1 zugreifen zu können, verwende man
$a = array_values(array_unique($a));
In PHP3 kann man sich z.B. mit folgender Konstruktion behelfen: arrays-duplikate-php3
Die einzig vernünftige und sichere Methode, um ein Array von einer Seite auf eine andere Seite zu transportieren, ist das Ablegen des Arrays in einer Session auf dem Server. Alle anderen Methoden stellen ein Sicherheitsrisiko dar und sollten nicht angewendet werden.
Weitere Informationen zu Sessions finden sich in version4_session und in sessions-zweck
Im Prinzip kann man ein Array mit serialize() in einen String verwandeln und per URL weiterreichen (URL-Codierung etc. nicht vergessen), aber das ist wegen der begrenzten Länge von URLs und der Manipulationsmöglichkeit durch den Benutzer zu vermeiden.