Suche nach als

Array Numerisch

Auf dieser Seite:

Ein Array ist eine Sammlung von Variablen, in numerischen Arrays sind diese Variablen durch nummeriert - beginnend bei [0]. PHP stellt viele Funktionen bereit, um Arrays zu erstellen, zu verändern,zu sortieren, zu analysieren und auszugeben.

Auf der Seite Assoziative Arrays sind weitere Array Funktionen beschrieben.

Array numerisch indexiert

Array erstellen und daraus einen Eintrag auslesen:

Der Index, also die Angabe, an welcher Position die Variable im Array steht, wird bei der Vorgabe in eckige Klammern geschrieben. Da der Index im numerischen Array eine Zahl ist, steht sie nicht in Anführungszeichen.
Arrays beginnen bei Null [0] zu zählen (wie in einem Haus, vor der 1. Etage kommt das Parterre).

<?php
 $Tier 
[0] = "Hahn"// Arrays beginnen bei Index 0
 
$Tier [1] = "Katze";
 
$Tier [2] = "Hund";
 
$Tier [3] = "Pferd"// der vierte Eintrag hat Index 3
 
$Tier [4] = "Esel";
 echo 
$Tier [3];
?>
Pferd

Ich bräuchte den Schlüssel nicht vorzugeben, die Indexes werden dann automatisch durchnummeriert. Die Werte werden so immer an der Stelle des ersten freien Index oder am Ende angefügt.

<?php
$Tieer 
[] = "Hahn"// Arrays beginnen immer bei 0 !
$Tieer [] = "Katze";
$Tieer [] = "Hund";
$Tieer [] = "Pferd";
$Tieer [] = "Esel";

// zur Auswahl muss man den Index kennen
echo $Tieer [3]."<br/>";

$Tieer [] = "Kuh"// hinten hinzufügen geht ganz einfach
echo $Tieer [5]."<br/>";

// ändern: da ein Index nur einen Wert enthalten kann, 
// wird ein vorhandener Eintrag einfach &uuml;berschrieben:
$Tieer [2] = "Wolf <br />";
echo 
$Tieer [2];

$Tieer [] = "Affe"// ein Zusätzlicher Eintrag fügt einen Wert am Ende an
echo end($Tieer); // Ausgabe letzter Eintrag
?>
Pferd
Kuh
Wolf
Affe

Array Konstruktor

Kurze Schreibweise

array();

<?php
 $Tire 
= array ("Hahn""Katze""Hund""Pferd""Esel") ; // Nummerierung erfolgt automatisch und beginnt bei 0
 
echo $Tire [3]; 
?>
Pferd

Bestimmte Indexierung

1 => "...",

Will man die Nummerierung vorgeben, teilt man dem Schlüssel den Wert mit => zu. Diese Einträge werden extra in ungeordneter Reihenfolge benannt. So können Löcher entstehen, die sich in einer Schleifenabfrage seltsam auswirken.

<?php
 $Tiere 
= array (=> "Katze"=> "Esel"=> "Hund"=> "Pferd"=> "Hahn",) ;
 echo 
$Tiere[3];
?>
Pferd

Es liesse sich auch ein Numerischer Array beginnend mit dem Index 1 (ohne Index 0) erstellen (z.B. für die Monate im Jahr):

<?php
$Tiere 
= array (=> "Katze""Hund""Pferd""Esel");
if(!isset(
$Tiere[0])){ 
 
$return="Kein Index 0."
} else {
 
$return="Index 0 is set.";
}
 echo 
$return;
?>
Kein Index 0.

Einträge am Ende hinzufügen

array_push()

<?php
 array_push
($Tiere,"Zebra","Affe");
?>

Das hatten wir schon gekonnt, mit $Tiere[]="Zebra"; $Tiere[]="Affe"; hätten wir das Gleiche erreicht.
Eine numerische Indizierung erfolgt immer automatisch, falls nichts angegeben wird (einem assoziativ indexierten Array kann so nichts hinzugefügt werden).

Auf diesen letzten Array beziehen sich nun alle folgenden Funktionen!

Array analysieren

Alle Funktionen ausser isset() setzen voraus, dass die Variable existiert.
Falls eine Variable aufgerufen wird, die gar nicht gesetzt ist, gibt es eine Fehlermeldung.

Ist diese Variable überhaupt gesetzt?

isset();

isset() fragt: Gibt es diese Variable, diesen Array überhaupt? und gibt 1 für TRUE oder nichts für FALSE zurück.
echo isset($hjkl);
// FALSE falls hier nichts davor steht

echo !isset($hjkl);
1 // es ist TRUE, dass es $hjkl nicht gibt

Ist diese Variable ein Array?

is_array();

is_array() fragt: Ist diese Variable ein Array? und gibt 1 für TRUE oder nichts für FALSE zurück.
echo is_array($Tiere);
1 // 1 für true

Zwei Funktionen um komplexe Arrays komplett darzustellen sind: print_r() oder var_dump() auf einer eigenen Seite.

Total der Einträge im Array?

count($ArrayName);

Zähle alle Einträge des Arrays:

<?php
  $anzahl = count($Tiere); // gibt Anzahl Einträge zurück
  echo $anzahl;
?>

6 // Anzahl Tiere
Die Anzahl Einträge kann ich in einer Schlaufe einsetzen:

<?php
  $intZaehlerstand = 0;
  while ($intZaehlerstand < $anzahl) {
  echo "Noch " .($anzahl-$intZaehlerstand). " mal etwas verarbeiten ...
"; $intZaehlerstand += 1; } if ($intZaehlerstand == $anzahl){ echo "Fertig!"; } ?>
Noch 6 mal etwas verarbeiten ...
Noch 5 mal etwas verarbeiten ...
Noch 4 mal etwas verarbeiten ...
Noch 3 mal etwas verarbeiten ...
Noch 2 mal etwas verarbeiten ...
Noch 1 mal etwas verarbeiten ...
Fertig!

Ist ein Wert vorhanden?

in_array("Zebra",$Tiere);

Ist ein bestimmter Eintrag in diesem Array enthalten? in_array() gibt bloss true oder false zurück ...
echo in_array("Zebra",$Tiere);
1 // 1 falls Zebra da drin ist

echo in_array("Cebra",$Tiere);
// nichts, falls Cebra nicht da drin ist

Welchen Index hat das Zebra?

array_search ("Zebra", $Tiere);

Wo ist das Zebra?: array_search() gibt den Index zurück, ein Mehr an Information gegenüber in_array() bei gleichem Aufwand.

<?php
  $finde = array_search ("Zebra", $Tiere);
  echo "Index $finde ist ";
  echo $Tiere[$finde]; // wie echo $Tiere[1]
?>
Index 5 ist Zebra

Der allerletzte Eintrag?

end($Tiere);

print end($Tiere);
Affe

foreach Schleife

Zum Abarbeiten von Arrays werden vorübergehend Variablen erstellt, und bei jedem Durchgang überschrieben, nachdem sie ausgegeben wurden.
Löcher im Array sind Fehlerquellen bei der Array Ausgabe mittels while und for Schleifen; also zum Arrays ausgeben besser die foreach Schleife nutzen!

Nur die Werte ausgeben:

foreach($Tiere as $Wert)

<?php
 
foreach($Tiere as $Wert)
 {
 echo 
$Wert ."<br />";
 }
?>
Katze
Hund
Pferd
Esel
Zebra
Affe

Index und Werte ausgeben:

foreach($Tiere as $Index => $Wert)

<?php
 
foreach($Tiere as $Index => $Wert)
 {
 echo 
$Index," ist "$Wert"<br />";
 }
?>
1 ist Katze
2 ist Hund
3 ist Pferd
4 ist Esel
5 ist Zebra
6 ist Affe

Die Reihenfolge entspricht derjenigen im Quelltext!

continue und break

continue; break;

continue und break werden auch innerhalb von do und while Schleifen verwendet.

continue und break werden innerhalb von foreach Schleifen verwendet: continue um den aktuellen Durchlauf abzubrechen, es wird nur das Ende übersprungen und beim nächsten Durchlauf fortgefahren.
break verlässt die Schleife ganz an Ort und Stelle.

<?php
$arr = array(1, 2, 3, 4, 5);
foreach($arr as $number) {
  if($number == 2) {
    continue;        // Unterbruch
  }
  if($number == 4) {
    break;           // Abbruch
  }
  print $number;     // Zahl ausgeben fals vorher nicht Abbruch
}
?>

So wird nicht 12345 ausgegeben sondern nur:

13

Arrays vergleichen

Kommen in einem Array-1 Einträge aus Array-2 vor?

Wir haben den grossen Array $Tiere. Den vergleichen wir mit dem kleineren Array $Huftiere:

<?php
$Huftiere = array ("Pferd", "Zebra", "Esel");
echo 'Im Array $Tiere sind folgende Huftiere enthalten:<br />';
foreach($Huftiere as $Huftier) {
  if(in_array($Huftier, $Tiere)) {
    echo $Huftier."<br />";
 }
}
?>
Im Array $Tiere sind folgende Huftiere enthalten:
Pferd
Zebra
Esel

Das Selbe, nämlich die Schnittmenge, erreiche ich durch eine vorgegebene Funktion:

array_intersect()

<?php
$TrefferInTiere = array_intersect($Tiere, $Huftiere);
print_r($TrefferInTiere);
?>
Array ( [3] => Pferd [4] => Esel [5] => Zebra )

Ich könnte den ersten (grossen) Array sogar mit mehreren Arrays vergleichen!

Und auch die Restmenge, erhalte ich durch eine vorgegebene Funktion:

array_diff()

<?php
$RestInTiere = array_diff($Tiere, $Huftiere);
print_r($RestInTiere);
?>
Array ( [1] => Katze [2] => Hund [6] => Affe )

Sind zwei Arrays gleich?

Ob zwei Arrays gleich oder gar identisch sind, und zwar im Schlüssel wie im Wert, lässt sich durch eine Gleichung herausfinden:

==

<?php
if($Tiere === $Huftiere or $Tiere == $Huftiere){
  echo "Alle Tiere sind Huftiere.";
} else {
  echo "Nicht alle Tiere sind Huftiere.";
 }
?>
Nicht alle Tiere sind Huftiere.

Array sortieren

Zum Sortieren von Arrays stellt PHP viele Varianten zur Verfügung. Einige sortieren nach Schlüssel ksort() andere nach Wert asort(). Beides auf- wie auch absteigend - mit einem r wie retour arsort() und krsort().

Sortiere ich Zahlen, möchte ich das nicht standartmässig sondern natürlich vornehmen. Natürlich natsort() erziehlt die Folge 1, 2, 11, 12, 20, standartmässig entstünde die Folge 1, 11, 12, 2, 20.
Auch die Gross- Kleinschreibung kann berücksichtigt werden mit natcasesort(). Und sogar eine zufällige Mischung gibt es: shuffle().

Mit Vorsicht zu geniessen ist die einfache Funktion sort(), sie sortiert die Werte und setzt neue, numerische Indizes - assoziative Arrays werden also numerisch.

Zuletzt gibt es auch eine Funktion, mit der ich mehrere Arrays auf einmal und mehrdimensionale Arrays sortieren kann array_multisort().

Nach Wert (array) absteigend (rückwärts) sortieren

arsort($Arrayname);

... und erneut ausgeben, die Reihenfolge hat geändert!

Zebra ist 5
Pferd ist 3
Katze ist 1
Hund ist 2
Esel ist 4
Affe ist 6

Aufsteigend hiesse der Befehl asort($Arrayname); -ohne 'r'

Array nach Index (key) aufsteigend sortieren

ksort($Arrayname);

1 ist Katze
2 ist Hund
3 ist Pferd
4 ist Esel
5 ist Zebra
6 ist Affe

Das 'k' bei ksort steht für Key (Schlüssel).
Absteigend hiesse der Befehl krsort($Arrayname); -mit 'r' wie Rückwärts.

Eintrag löschen oder hinzufügen

Am Ende löschen

array_pop(Arrayname);

1 ist Katze
2 ist Hund
3 ist Pferd
4 ist Esel
5 ist Zebra

Es fehlt jetzt der zuletzt hinzugefügte Eintrag 'Affe'!
Der Code sieht so aus:
<?php
array_pop($Tiere);
?>
<?php
foreach($Tiere as $Index => $Wert)
{
echo $Index," ist ", $Wert, "<br>";
}
?>

Drei Array Einträge am Anfang hinzufügen

array_unshift();

0: Floh
1: Alligator
2: Schwein
3: Katze
4: Hund
5: Pferd
6: Esel
7: Zebra

Es hat jetzt vorne 3 Tiere mehr und dadurch haben sich die Indexzahlen der früheren Einträge verändert.
Der Code sieht so aus:
<?php
array_unshift($Tiere, "Floh", "Alligator", "Schwein")
?>
<?php
foreach($Tiere as $Index => $Wert)
{
echo $Index,": ", $Wert, "<br>";
}
?>

Einen Array Eintrag am Anfang Löschen

array_shift();

0 => Alligator
1 => Schwein
2 => Katze
3 => Hund
4 => Pferd
5 => Esel
6 => Zebra

Es hat jetzt vorne wieder keinen Floh mehr und dadurch haben sich die Indexzahlen der anderen Einträge erneut verändert.
Der Code sieht so aus:
<?php
array_shift($Tiere)
?>
<?php
foreach($Tiere as $Index => $Wert)
{
echo $Index," => ", $Wert, "<br>";
}
?>

Array Eintrag ersetzen

array_splice()

array_splice() ersetzt einen Eintrag in einem Array und nimmt 4 Parameter entgegen. Durch kluge Nutzung dieser Parameter kann ich unterschiedliche Lösungen erzielen, wie das Löschen eines Array Eintrages von bliebiger Stelle, Einfügen eines Array Eintrages an beliebiger Stelle und das Verschieben eines Array Eintrages (sh. weiter unten).
Die Parameter sind:

  1. Array in dem ersetzt wird
  2. Position des ersten zu ersetzenden Eintrags
  3. Länge des zu ersetzenden Stückes in Anzahl Einträgen
  4. der Ersatz Eintrag kann ein String oder eine Variable oder ein Array sein

Ersetzen eines beliebigen Array Eintrags

Im Array hat der erste Eintrag die Position 0. Es wird nur ein Eintrag ersetzt. Der Alligator wird durch ein Krokodil ersetzt, statt "Krokodil" könnte auch array("Krokodil", "Schlange") stehen, um mit zwei Begriffen zu ersetzen.

<?php
echo "vorher:<br />";
foreach(
$Tiere as $Index => $Wert) {
  echo 
"$Index ist $Wert<br />";
}
array_splice($Tiere01"Krokodil"); // Position 0 ist der erste Eintrag
echo "<br />nachher:<br />";
foreach(
$Tiere as $Index => $Wert) {
  echo 
"$Index ist $Wert<br />";
}
?>
vorher:
0 ist Alligator
1 ist Schwein
2 ist Katze
3 ist Hund
4 ist Pferd
5 ist Esel
6 ist Zebra

nachher:
0 ist Krokodil
1 ist Schwein
2 ist Katze
3 ist Hund
4 ist Pferd
5 ist Esel
6 ist Zebra

Array Eintrag an bestimmter Stelle einfügen

Der Grashüpfer soll an Position 3 im Array eingefügt werden, dadurch verschiebt er die nachfolgenden Einträge nach hinten.

<?php
array_splice
($Tiere30"Grashüpfer"); // 0 Einträge löschen
echo "nachher:<br />";
foreach(
$Tiere as $Index => $Wert) {
  echo 
"$Index ist $Wert<br />";
}
?>
nachher:
0 ist Krokodil
1 ist Schwein
2 ist Katze
3 ist Grashüpfer
4 ist Hund
5 ist Pferd
6 ist Esel
7 ist Zebra

Benachbarte Array Einträge tauschen

Der Grashüpfer soll im Array eine Stelle nach hinten (unten) verschoben werden. Das entspräche einem Tausch von 4 mit 3. Dazu nehme ich ab Position 3 zwei Einträge nämlich 3 und 4 raus und ersetze die mit den Einträgen 4 und 3 als Array.

<?php
$Ersatz 
= array($Tiere[4], $Tiere[3]);
array_splice($Tiere32$Ersatz); // ab Pos 3, entferne 2 Einträge, ersetze mit Array
echo "<br />nachher:<br />";
foreach(
$Tiere as $Index => $Wert) {
  echo 
"$Index ist $Wert<br />";
}
?>
nachher:
0 ist Krokodil
1 ist Schwein
2 ist Katze
3 ist Hund
4 ist Grashüpfer
5 ist Pferd
6 ist Esel
7 ist Zebra

Das Umgekehrte, das Verschieben eines Array Eintrags nach vorne, ist auch möglich. Z.B. das Pferd soll nun über den Grashüpfer springen. Ich würde die Positionen 4 und 5 durch die Positionen 5 und 4 ersetzen. Den Ersatz muss ich natürlich vorbereiten. Ich kann auch mehr Einträge ersetzen und die Anzahl Einträge die ersetzt werden, müssen nicht mit der Anzahl Ersatzeinträge übereinstimmen.

Array Eintrag an beliebige Position verschieben

Mit einer Funktion und einem Zwischenspeicher kann ich einen Eintrag an eine beliebige Position verschieben. Dabei zeigt sich, dass ich durch fehlenden Ersatz einfach ein Array Eintrag von beliebiger Position löschen kann.

<?php
function array_move($array$oldpos$newpos) {
  
$tmp  array_splice($array$oldpos1); // ersatzlos gestrichen aber in Zwischenspeicher
  
array_splice($array$newpos0$tmp);
  return 
$array;
}
$Tiere array_move($Tiere31);
echo 
"nachher:<br />";
foreach(
$Tiere as $Index => $Wert) {
  echo 
"$Index ist $Wert<br />";
}
?>
nachher:
0 ist Krokodil
1 ist Hund
2 ist Schwein
3 ist Katze
4 ist Grashüpfer
5 ist Pferd
6 ist Esel
7 ist Zebra

Den ganzen Rest ersetzen

Ab dem Pferd soll der restliche Array ersetzt werden. Ich kann die Position des Pferdes vom Ende des Arrays her angeben. Ich kann auf Nummersicher gehen und mehr Einträge wegnehmen als es hat, ohne Fehler zu erzeugen (das ist in dem Beispiel unsinnig, weil ich ja von Hinten zähle).

<?php
// ab der 3.letzten Position, entferne alles (ich könnte auch 1000 Einträge löschen)
$Resttiere=array_splice($Tiere, -3count($Tiere), "Huftier"); 
echo 
"<br />nachher:<br />";
foreach(
$Tiere as $Index => $Wert) {
  echo 
"$Index ist $Wert<br />";
}
?>
nachher:
0 ist Krokodil
1 ist Hund
2 ist Schwein
3 ist Katze
4 ist Grashüpfer
5 ist Huftier

array_splice() gibt ein Array zurück, das aus den ausgeschnittenen Einträgen besteht (das hatte ich schon weiter oben in \$temp genutzt).

<?php
echo "der Rest war:<br />";
foreach(
$Resttiere as $Index => $Wert) {
  echo 
"$Index ist $Wert<br />";
}
?>
der Rest war:
0 ist Pferd
1 ist Esel
2 ist Zebra

Array in einzelne Variablen teilen

list()

list() weist Einträge eines numerischen Arrays einzelnen Variablen zu. Dazu werden erst Variablennamen erzeugt. Soviele Variablen wie benannt wurden, sovielen können dann auch Einträge zugewiesen werden, und zwar beginnend mit dem Arrayeintrag 0.

<?php
  
list($ti0$ti1$ti2$ti3) = $Tiere;
  echo 
'$ti0 enthält nun '.$ti0.', $ti1 enthält nun '.$ti1.', $ti2 enthält nun '.$ti2.', $ti3 enthält nun '.$ti3;
?>
$ti0 enthält nun Krokodil, $ti1 enthält nun Hund, $ti2 enthält nun Schwein, $ti3 enthält nun Katze

Möchte ich nur den Indice [2] ausgeben, muss ich für [0] und [1] einen leeren Listenplatz vorsehen.

<?php
  
list( , , $ti2) = $Tiere;
  echo 
'$ti2 enthält nun '.$ti2;
?>
$ti2 enthält nun Schwein

Wie ein Array in Strings auseinandergenommen wird und Strings zum Array werden:
String zu Array zu String

Map Funktion

array_map()

Jedes Element eines arrays einer Funktion übergeben (in lower cases wandeln), das Resultat in einer Variablen ($Tiere_lc) auffangen und wiedergeben:

<?php
 $Tiere_lc 
array_map("strtolower"$Tiere);
 print(
$Tiere_lc[3]);
?>
katze

Der Array $Tiere wurde dabei nicht verändert, schau <?php echo $Tiere[3]; ?> Katze ist noch mit einem Grossbuchstaben geschrieben.

Mehrdimensionaler Array

Die sind wie Tabellen, mit 'Spalten' und 'Zeilen':

$multi 0 1 2
0 001 002 003
1 004 005 006

Multi-Array mit [Identifizierer] erstellen

$ArrayName [Zeile] [Spalte] = "Eintrag"

Für die Abarbeitung braucht es 2 foreach-Schleifen, denn wir haben ja 2 Dimensionen.

<?php
 $multi 
[0] [0] = "001"// die Zahlen in &quot; sind Strings
 
$multi [0] [1] = "002";
 
$multi [0] [2] = "003"// erste Zeile Index 0, dritte Spalte Index 2
 
$multi [1] [0] = "004";
 
$multi [1] [1] = "005";
 
$multi [1] [2] = "006";
 
 foreach (
$multi as $dim1)
 {
  foreach (
$dim1 as $dim2)
  {
  echo 
"$dim2<br />\n";
  }
 }
?>
001
002
003
004
005
006

Multi-Array mit array(); Konstruktoren erstellen

<?php
$multipl=array ( // Spalten entsprechend Anzahl Einträgen in Zeilen
array ("001","002","003"), // Zeile 0
array ("004","005","006") // Zeile 1
);
print $multipl [0][2]; // erste Zeile Index 0, dritte Spalte Index 2
?>
Ausgabe (eines Wertes):
003


Valid XHTML 1.0 Check den Code.

Array Assoziativ >> << Variable und Arrays:
Ich bin hier: > PHP Lehrling >>> Array Numerisch
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 19.05.2012