SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=161&group=28&page=2
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Funktionen für mehrere Elemente


Einsatz von array_walk()

Oft werden Funktionen genutzt, um Elemente zu bearbeiten. Um nun eine Funktion, gleich ob intern oder selbst definiert, auf alle Elemente eines Arrays anzuwenden, verwenden Sie die Funktion array_walk().

Beispiel
<?php
$produkte = array (
    "a"=>"Gurke",
    "b"=>"Lauch",
    "c"=>"Brokoli",
    "d"=>"Kohl"
    );

function formatieren (&$item1, $key, $prefix) {
  $item1 = "$prefix: $item1";
}

function ausgeben ($item2, $key) {
  echo "$key. $item2<br>";
}

echo "Funktion ausgeben:<br>";
array_walk ($produkte, 'ausgeben');

array_walk ($produkte, 'formatieren', 'Gemüse');
echo "Nach der Formatierung:<br>";

array_walk ($produkte, 'ausgeben');
?>

Ausgabe
Funktion ausgeben:
a. Gurke
b. Lauch
c. Brokoli
d. Kohl
Nach der Formatierung:
a. Gemüse: Gurke
b. Gemüse: Lauch
c. Gemüse: Brokoli
d. Gemüse: Kohl

Die genaue Anzahl der Elemente des Arrays müssen Sie dazu nicht kennen. array_walk() arbeitet mit der ersten Dimension und übergibt jedes Element, egal ob Array oder nicht, an die aufgerufene Funktion. Theoretisch kann man hier erneut mit array_walk() arbeiten, um die nächste Dimension zu erreichen.

Hinweis: Sollte die Funktion, die array_walk() aufruft, nicht vorhanden sein bzw. den Funktionsbezeichner falsch geschrieben haben, erfolgt keine Fehlermeldung. Es wird lediglich eine Warnung ausgegeben. Achten Sie daher auf die korrekte Schreibweise.


Einsatz von count() / sizeof()

Um die Anzahl der Einträge eines Arrays herauszubekommen, können Sie entweder count() oder sizeof() verwenden.

Beispiel

<?php
$produkte = array (
    "a"=>"Gurke",
    "b"=>"Lauch",
    "c"=>"Brokoli",
    "d"=>"Kohl"
    );

// Ausgabe (4)
echo count($produkte);
// Ausgabe (4)
echo sizeof($produkte);
?>


Einsatz von current()/pos()

Jedes Arrays hat einen internen Arrayzeiger, welcher auf sein aktuelles Element verweist. Um das aktuelle Element eines Arrays auszulesen, stehen Ihnen die Funktionen current() und pos() zur Verfügung.{PSP}Beispiel

<?php
$produkte = array (
    "a"=>"Gurke",
    "b"=>"Lauch",
    "c"=>"Brokoli",
    "d"=>"Kohl"
    );

// Ausgabe (Gurke)
echo current($produkte);
// Ausgabe (Gurke)
echo pos($produkte);
?>


Einsatz von key()

Für den Schlüssel des aktuellen Elements steht Ihnen die Funktion key() zur Verfügung.

Beispiel

<?php
$produkte = array (
    "a"=>"Gurke",
    "b"=>"Lauch",
    "c"=>"Brokoli",
    "d"=>"Kohl"
    );

// Ausgabe (a)
echo key($produkte);
?>


Einsatz von list()

Mit Hilfe von list() übertragen Sie die Elemente eines Arrays auf einzelne Variablen. Dies erleichtert unter Umständen die Weiterverarbeitung.

Beispiel

<?php
$produkte = array (
    "Gurke",
    "Lauch",
    "Brokoli",
    "Kohl"
    );
list($produkta, $produktb, $produktc, $produktd) = $produkte;
// Ausgabe – Gurke
echo $produkta;
// Ausgabe – Kohl
echo $produktd;
?>


Einsatz von each()

Mithilfe der Funktion each() haben Sie eine ideale Ergänzung zu list(). Hiermit wird ein komplettes Schlüssel-Werte-Paar an ein eindimensionales Array übergeben. Um genau zu sein, werden vier Werte übergeben, die den Schlüsseln 0,1,key und value entsprechen.

Beispiel

<?php
$personen = array (
    "P1"=> "Matthias",
    "P2"=> "Caroline",
    "P3"=> "Gülten",
    "P4"=> "Toni"
    );
$person = each($personen);

echo $person . "<br>";
echo "0: " . $person["0"] . "<br>";
echo "1: " . $person["1"] . "<br>";
echo "key: " . $person["key"] . "<br>";
echo "value: " . $person["value"] . "<br>";
?>

Ausgabe
Array
0: P1
1: Matthias
key: P1
value: Matthias
{PSP}
Hinweis: Sämtliche assoziativen Arrays verfügen über diese Eigenschaften. Die numerischen Schlüssel sowie key und value sind von Anfang an vorhanden und werden nicht erst durch each() erzeugt.


Kombination von each() und list()

In Kombination mit list() lassen sich so auch komplexe Arrays sehr leicht in ihre Bestandteile zerlegen, die Ausgabe von each() wird hierbei direkt in list() übergeben. Sehr häufig wird dabei eine while-Schleife mit einbezogen. Sobald each() keine weiteren Elemente vorfindet, wird FALSE zurückgegeben und die Schleife beendet. Der interne Arrayzeiger wird übrigens automatisch durch each() weitergesetzt.

Beispiel

<?php
$personen = array (
    "P1"=> array("Matthias","Kannengiesser"),
    "P2"=> array("Caroline","Kannengiesser"),
    "P3"=> array("Gülten","Kannengiesser"),
    "P4"=> array("Toni","Schmidt")
    );
while (list ($key, $val) = each ($personen)) {
  echo "$key => $val[0] $val[1]<br>";
}
?>

Ausgabe
P1 => Matthias Kannengiesser
P2 => Caroline Kannengiesser
P3 => Gülten Kannengiesser
P4 => Toni Schmidt


Einsatz von prev() und next()

Sollten Sie each() mehrfach anwenden, werden nacheinander sämtliche Elemente des Arrays ausgegeben. Der interne Arrayzeiger, der auf das aktuelle Element des Arrays zeigt, wandert im Array weiter. Dies ist unter Umständen nicht erwünscht. Sie können daher mit den Funktionen prev() und next() den Zeiger vor- und zurücksetzen.

Beispiel

<?php
$personen = array (
    "Matthias",
    "Caroline",
    "Gülten",
    "Toni"
    );
// Ausgabe – Caroline
echo next($personen);
// Ausgabe – Gülten
echo next($personen);
// Ausgabe – Caroline
echo prev($personen);
?>


Einsatz von reset() und end()

Um einen definierten Ausgangspunkt für den internen Arrayzeiger zu erhalten, stehen Ihnen die Funktionen reset() und end() zur Verfügung. Mit reset() wird der Zeiger auf den ersten Eintrag des Arrays gesetzt und mit end() auf den letzten.

Beispiel

<?php
$personen = array (
    "Matthias",
    "Caroline",
    "Gülten",
    "Toni"
    );
// Ausgabe – Toni
echo end($personen);
// Ausgabe – Matthias
echo reset($personen);
?>