aktuelle.kurse/m133/4_Modulinhalte_und_Uebungen/01-Grundlagen/03-PHP-einfach/einf_php_array.php.htm
Harald G. Mueller cdff097ef7 muh
2022-03-17 11:19:26 +01:00

528 lines
19 KiB
HTML
Raw Blame History

<html>
<head>
<title>PHP-Einfach.de - PHP Einf&uuml;hrung - Array's und foreach</title>
<meta name="Author" content="Andavos">
<meta name="Publisher" content="Andavos">
<meta name="Copyright" content="Andavos">
<link rel="stylesheet" href="css/main.css" tppabs="http://www.php-einfach.de/offline/css/main.css" type="text/css">
</head>
<body text="#000000" bgcolor="#DDDDDD" link="#004A95" alink="#004A95" vlink="#525252">
<table align="center" height="100%" width="100%" cellspacing="0" border="0" cellpadding="0">
<tr>
<td align="center" valign="middle" height="100%" width="100%">
<table height="100" width="750" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" bgcolor="#FFE09F" width="750"><img src="grafiken/banner_top.jpg" tppabs="http://www.php-einfach.de/offline/grafiken/banner_top.jpg" width="750" height="100" border="0" alt="">
<a name="oben"></a></td>
</tr>
</table>
<table height="650" width="750" cellspacing="0" border="0" cellpadding="0">
<tr>
<td valign="top" bgcolor="#FFE09F" width="160">
<table width="160" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="5"></td>
<td class="black" height="100" width="150">
<br><b><center><img src="grafiken/side_navigation.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_navigation.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" class="blue" href="http://www.php-einfach.de/index.php"><b>&raquo;</b> Startseite</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_news.php"><b>&raquo;</b> News&uuml;bersicht</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_email.php"><b>&raquo;</b> Kontakt</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_impressum.php"><b>&raquo;</b> Impressum</a><br><br>
<center><img src="grafiken/side_community.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_community.gif" width="150" height="25" border="0" alt=""></center>
<a target="_blank" class="blue" target="_blank" href="http://forum.php-einfach.de/"><b>&raquo;</b> Forum</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_gaestebuch.php"><b>&raquo;</b> G&auml;stebuch</a><br><br>
<center><img src="grafiken/side_tutorials.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_tutorials.gif" width="150" height="25" border="0" alt=""></center>
<a class="blue" href="einf_php.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php.php"><b>&raquo;</b> Einf&uuml;hrung PHP</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_anfang.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_anfang.php"><b>&raquo;</b> Anfang</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_erste_schritte.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_erste_schritte.php"><b>&raquo;</b> Erste Schritte</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_variablen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_variablen.php"><b>&raquo;</b> Variablen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_if-anweisung.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_if-anweisung.php"><b>&raquo;</b> if-Anweisung</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_logische_operatoren.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_logische_operatoren.php"><b>&raquo;</b> Log. Operatoren</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_uebung1.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_uebung1.php"><b>&raquo;</b> &Uuml;bung</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_dateien.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_dateien.php"><b>&raquo;</b> Dateien</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_schleifen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_schleifen.php"><b>&raquo;</b> Schleifen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_array.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_array.php"><b>&raquo;</b> Array</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_dateien2.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_dateien2.php"><b>&raquo;</b> Dateien Teil 2</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_datum.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_datum.php"><b>&raquo;</b> Datum & Zeit</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_email.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_email.php"><b>&raquo;</b> Mail Funktion</a><br>
<div style="position: relative; left:15;" >
<a class="blue"href="einf_php_suchen_ersetzen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_suchen_ersetzen.php"><b>&raquo;</b> Suchen & Ersetzen</a><br>
<a class="blue" href="einf_php_nuetz_funktionen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_nuetz_funktionen.php"><b>&raquo;</b> N&uuml;tzliche Funktionen</a><br>
</div>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_sessions.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_sessions.php"><b>&raquo;</b> Sessions</a><br><br>
<a class="blue" href="einf_mysql.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql.php"><b>&raquo;</b> Einf&uuml;hrung MySQL</a><br>
<br>
<center>
<a target="_blank" href="http://www.php-einfach.de/nav_verlinkung.php"><img src="grafiken/php-einfach.gif" tppabs="http://www.php-einfach.de/offline/grafiken/php-einfach.gif" width="88" height="31" border="0" alt="PHP-Einfach.de"></a><br><br>
<a target="_blank" href="http://www.digicount.de/"><b>Counterdienst:</b></a>
<a target="_blank" href="http://www.php-einfach.de/nav_digicount.php"><div>
<img src="grafiken/digicount_livedemo.jpg" tppabs="http://www.php-einfach.de/offline/grafiken/digicount_livedemo.jpg" border="0" alt="Digicount.de"><br>
<small>Unser werbefreier Counter- und Statistikdienst</small></div>
</a>
</center>
</td>
<td height="100" width="5"></td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#FFFFFF" width="430">
<table width="430" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="10"></td>
<td valign="top" class="black" height="100" width="410">
<br>
<h4>Array und foreach</h4>
Ein Array ist eine Variable, in der man mehrere Werte speichern kann.<br><br>
Bisher konnte jede Variable nur einen Wert speichern, in einem Array k&ouml;nnen wir beliebig viele Werte speichern, auch von unterschiedlichen Typen. So kann ein Array z.B. eine Zeichenkette (String/Text), eine Ganzzahl und eine Zahl mit Kommastellen enthalten, und auf jeden dieser Werte kann man separat zugreifen. <br>
Aber ein Array kann noch deutlich mehr.<br><br>
Das h&ouml;rt sich jetzt alles recht kompliziert an, ist aber ganz einfach, darum hier ein Beispiel:<br>
<font color="#606060">
<pre>
&lt;?php
$wochentage = array("Sonntag","Montag","Dienstag",
"Mittwoch","Donnerstag","Freitag","Samstag");
?>
</pre>
</font>
Einem Array wird ganz normal ein Variable-Namen zugeordnet, hier <i>wochentage</i>, allerdings erfolgt die Zuweisung der Daten nicht einfach durch das Gleichheitszeichen, sondern danach kommt noch der Befehl: <b>array();</b>.<br>
In diesem Befehl sind jetzt die verschiedenen Werte gespeichert, bei uns die ausgeschriebenen Wochentage.<br><br>
Das Zugreifen auf solch einen Wert ist auch relativ simpel: <br>
<font color="#606060">
<pre>
&lt;?php
echo $wochentage[1];
?>
</pre>
</font>
<i>Ausgabe: Montag</i> <br><br>
Wir geben zuerst wieder den Variable-Namen (<i>wochentage</i>) an und danach das Element bzw. den Wert, auf das wir zugreifen m&ouml;chten.<br>
Ein Array hat dabei die enthaltenen Werte durchnummeriert, und f&auml;ngt bei <b>0</b> an zu z&auml;hlen.<br>
Also mit $wochentage[0]; w&uuml;rden wir den Wert <i>Sonntag</i> erhalten, <i>Montag</i> hat die Nummer (bzw. den Index) 1 und so weiter.<br><br><br>
Bei gro&szlig;en Arrays wird es nat&uuml;rlich irgendwann umst&auml;ndlich, zu wissen, welche Nummer/Index zu welchem Wert geh&ouml;rt, darum gibt es assoziative Arrays.<br>
Das hei&szlig;t, man kann f&uuml;r einen Wert einen Schl&uuml;ssel/Key zuweisen, dies kann z.B. eine andere Zeichenkette sein.<br>
Die Zuweisung erfolgt per: <b>=></b><br>
<font color="#606060">
<pre>
&lt;?php
$wochentage = array(
"so" => "Sonntag",
"mo" => "Montag",
"di" => "Dienstag",
"mi" => "Mittwoch",
"do" => "Donnerstag",
"fr" => "Freitag",
"sa" => "Samstag");
?>
</pre>
</font>
Dies ist wieder ein Array mit unseren Namen der Wochentage.
Dabei wurde dem Schl&uuml;ssel <i>so</i> der Wert <i>Sonntag</i> zugewiesen, dem Schl&uuml;ssel <i>mo</i> dem Wert <i>Montag</i>.<br>
Der Vorteil ist, dass man jetzt bequemer auf das Array zugreifen kann:<br>
<font color="#606060">
<pre>
&lt;?php
echo $wochentage["mo"];
?>
</pre>
</font>
<i>Ausgabe: Montag</i> <br><br>
Anstatt jetzt die Nummer/Index des Elementes anzugeben, gibt man hier den Schl&uuml;ssel f&uuml;r das Element an, also <b>so</b> f&uuml;r <i>Sonntag</i>, <b>mo</b> f&uuml;r <i>Montag</i> und <b>sa</b> f&uuml;r <i>Samstag</i>.<br><br>
Selbstverst&auml;ndlich kann man nachtr&auml;glich auch Werte in einem Array ver&auml;ndern:
<font color="#606060">
<pre>
&lt;?php
$wochentage["mo"] = "Monday";
echo $wochentage["mo"];
?></pre>
</font>
<i>Ausgabe: Monday</i> <br><br>
Das selbe gilt f&uuml;r Arrays mit Nummer/Indexen.<br><br><br>
Ein weiterer Vorteil ist, dass man einem Array neue Werte hinzuf&uuml;gen kann, diese Werte k&ouml;nnten z.B. aus einer Datenbank stammen.<br>
Das ganze Funktioniert so:<br>
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array("Bob","Peter");
$mitarbeiter[] = "Lisa";
echo $mitarbeiter[2];
?>
</pre>
</font>
<i>Ausgabe: Lisa</i> <br><br>
Mit $mitarbeiter[] wird automatisch ein neues Element in unserem Array erstellt, und diesem wird der Wert <i>Lisa</i> zugewiesen.<br><br>
Wir k&ouml;nnten unser Array sogar so erstellen:<br>
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array();
$mitarbeiter[] = "Bob";
$mitarbeiter[] = "Peter";
$mitarbeiter[] = "Lisa";
?>
</pre>
</font>
Hier wird zuerst ein leeres Array erstellt und danach werden die Mitarbeiter hinzugef&uuml;gt.<br><br>
Mit assoziativen Arrays funktioniert dies zu &auml;hnlich, aber wir m&uuml;ssen den Schl&uuml;ssel mit angeben:
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array(
"Bob" => "Bob Meier",
"Peter" => "Peter von Hausen");
$mitarbeiter["Lisa"] = "Lisa M<>ller";
echo $mitarbeiter["Lisa"];
?>
</pre>
</font>
<i>Ausgabe: Lisa M&uuml;ller</i> <br><br>
Wenn der Schl&uuml;ssel schon vergeben wurde, dann wird der Wert f&uuml;r die Schl&uuml;ssel &uuml;berschrieben.<br><br><br>
<h4>Anzahl der Elemente</h4>
Wenn wir in einem Array dynamisch neue Elemente hinzuf&uuml;gen k&ouml;nnen, dann ist es sehr wichtig zu wissen, wie viele Elemente das Array &uuml;berhaupt enth&auml;lt, dies funktioniert mit: <b>count($names_des_array);</b>:
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array("Bob","Peter");
echo count($mitarbeiter);
?>
</pre>
</font>
<i>Ausgabe: 2</i> <br><br>
Wir erhalten als Ausgabe 2, denn in dem Array sind 2 Mitarbeiter gespeichert, der letzte Index ist allerdings 1, weil bei 0 angefangen wird zu z&auml;hlen.<br>
Um den letzten Eintrag auszugeben, m&uuml;ssen wir von dem Wert einfach 1 abziehen.<br><br>
<h4>Elemente ausgeben</h4>
Zum Ausgeben aller Elemente in einem Array benutzt man gew&ouml;hnlich eine Schleife, dies kann eine <b>for</b> oder eine <b>while</b> Schleife sein:
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array("Bob","Peter","Lisa");
echo "For-Schleife: &lt;br>";
for($i=0; $i &lt; count($mitarbeiter); $i++)
{
echo $mitarbeiter[$i]."&lt;br>";
}
echo "&lt;br> While-Schleife: &lt;br>";
$i = 0;
while($i &lt; count($mitarbeiter))
{
echo $mitarbeiter[$i]."&lt;br>";
$i++;
}
?>
</pre>
</font>
Beide Varianten funktionieren einwandfrei, aber es gibt noch eine 3. Schleife: <b>foreach</b>
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array("Bob","Peter","Lisa");
echo "Foreach-Schleife: &lt;br>";
foreach($mitarbeiter AS $name)
{
echo $name."&lt;br>";
}
?>
</pre>
</font>
Im Schleifenkopf definieren wird, dass die Werte in <i>$name</i> gespeichert werden soll. Unter dieser Variable k&ouml;nnen wir dann innerhalb der Schleife auf den jeweiligen Namen des Mitarbeiters zugreifen.<br><br>
<h4>Suchen & Sortieren</h4>
Ein weiteres Feature ist, dass wir ein Array durchsuchen und sortieren k&ouml;nnen.<br>
Zuerst die Suchfunktion, dies geht mit <b>in_array($suche,$array);</b>:<br>
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array("Bob","Peter","Lisa");
if(in_array("Bob",$mitarbeiter))
{
echo "Der Name Bob ist in dem Array enthalten";
}
?>
</pre>
</font>
Hier &uuml;berpr&uuml;fen wir, ob <i>Bob</i> in dem Mitarbeiter-Array vorhanden ist, wenn ja, gibt die Funktion <font color="#00DF00">true</font> zur&uuml;ck, und ein Text wird ausgegeben (das Bob in dem Array vorhanden ist).<br><br>
Das war auch schon das Gr&ouml;bste zum Suchen, jetzt das Sortieren. Oft herrscht in so einem Array 'Chaos', dass z.B. die Mitarbeiter wild hinzugef&uuml;gt wurden. M&ouml;chte man jetzt eine alphabetische Liste der Mitarbeiter ausgeben, dann muss man das Array zuerst sortieren. PHP bietet daf&uuml;r viele M&ouml;glichkeiten. <br><br>
M&ouml;chte man die Werte sortieren, verwendet man die Funktionen <b>asort</b> oder <b>arsort</b>, wobei <i>asort</i> eine aufsteigende Reihenfolge (a,b,c,d) liefert und <i>arsort</i> eine absteigende (d,c,b,a). <br><br>
Beispiel:<br>
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array("Klaus","Arnie","Willi");
//Array sortieren
asort($mitarbeiter);
//Array ausgeben
echo "Foreach-Schleife: &lt;br>";
foreach($mitarbeiter AS $name)
{
echo $name."&lt;br>";
}
?>
</pre>
</font>
Hier wird per <b>asort()</b> das Array in aufsteigender Reihenfolge sortiert und danach mit foreach ausgegeben.<br><br>
Um die Schl&uuml;ssel (mit deren Werte), zu sortieren, verwendet man <b>ksort</b> oder <b>krsort</b>.
Beispiel:<br>
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array(
"Zabel" => "Klaus",
"Meier" => "Arnie",
"Brand" => "Willi");
//Array sortieren
ksort($mitarbeiter);
//Array ausgeben
echo "Foreach-Schleife: &lt;br>";
foreach($mitarbeiter AS $name)
{
echo $name."&lt;br>";
}
?>
</pre>
</font>
<h4>Mehrdimensionale Arrays</h4>
In einem Array kann man ein weiteres Array, und in diesem Array wieder ein Array speichern, und so weiter. Solche Arrays nennt man dann <b>mehrdimensionale Arrays</b>.<br>
Die Dimension gibt dabei an, wie Tief diese Verschachtelung geht. Ein normales Array w&auml;re ein 1-dimensionales Array, wenn jetzt in dem Array ein weiteres Array gespeichert ist, ist dies ein 2-dimensionales Array.<br><br>
Daf&uuml;r hier ein Beispiel:<br>
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array(
array("Klaus", "Zabel"),
array("Arnie", "Meier"),
array("Willi", "Brand")
);
//Daten ausgeben
echo "Vorname: ".$mitarbeiter[0][0];
echo " Nachname: ".$mitarbeiter[0][1];
?>
</pre>
</font>
<i>Ausgabe: Vorname: Klaus Nachname: Zabel</i><br><br>
Wie wir sehen, gibt man jetzt nicht nur einen Index an, sondern zwei. Der erste Index gibt an, welchen Mitarbeiter wir aus der Liste haben m&ouml;chte, und der zweite Index ob wir den Vornamen, oder den Nachnamen ausgeben m&ouml;chten.<br><br>
Dies geht nat&uuml;rlich auch mit assoziativen Arrays und der 'anderen' Schreibweise:
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array();
$mitarbeiter[] = array("Vorname"=>"Klaus",
"Nachname"=>"Zabel");
$mitarbeiter[] = array("Vorname"=>"Arnie",
"Nachname"=>"Meier");
$mitarbeiter[] = array("Vorname"=>"Willi",
"Nachname"=>"Brand");
//Daten ausgeben
echo "Vorname: ".$mitarbeiter[0]["Vorname"];
echo " Nachname: ".$mitarbeiter[0]["Nachname"];
?>
</pre>
</font>
Da wir jetzt in einem normalem Array ein assoziatives Array (also eins mit Schl&uuml;ssel) speichern, m&uuml;ssen wir als zweiten Wert auch den Schl&uuml;ssel f&uuml;r Vor/Nachname angeben.<br><br>
Dies geht nat&uuml;rlich auch mit noch mehr Dimensionen, z.B. so:
<font color="#606060">
<pre>
&lt;?php
$mitarbeiter = array();
$mitarbeiter["Klaus"]["Vorname"] = "Klaus";
$mitarbeiter["Klaus"]["Nachname"] = "Zabel";
$mitarbeiter["Klaus"]["Kinder"][] = "Klaus-Junior";
$mitarbeiter["Klaus"]["Kinder"][] = "Kind2";
//Daten ausgeben
echo "Vorname: ".$mitarbeiter["Klaus"]["Vorname"];
echo " Nachname: ".$mitarbeiter["Klaus"]["Nachname"];
echo "&lt;br> Er hat ";
echo count($mitarbeiter["Klaus"]["Kinder"])." Kinder";
//Ausgabe von Kind1:
//$mitarbeiter["Klaus"]["Kinder"][0];
echo "&lt;br> Kinder: &lt;br>";
foreach($mitarbeiter["Klaus"]["Kinder"] AS $name)
{
echo $name."&lt;br>";
}
?>
</pre>
</font>
Dies ist schon etwas schwerer zu verstehen, aber wenn man es verstanden hat, sollte es eigentlich keine weiteren Fragen zu Arrays geben.<br><br>
Also zuerst haben wir wieder unser Array mit dem Mitarbeiter <i>Klaus</i>. Dabei benutzen wir diesmal gleich ein assoziatives Array.<br>
F&uuml;r <i>Klaus</i> wurde jetzt der Vorname und der Nachname gespeichert, dies sollte ja noch bekannt sein.<br>
Unter dem Schl&uuml;ssel <b>Kinder</b> f&uuml;gen wir jetzt ein weiteres Array hinzu, wobei jedes Element dieses Arrays den Namen eines Kindes von ihm enth&auml;lt. <br>
Dieses Array mit den Kindernamen k&ouml;nnen wir ganz normal per foreach ausgeben. <br>
<br><br>
Das war's auch schon was man &uuml;ber Arrays wissen muss.<br><br>
Jetzt k&ouml;nnen wir <a href="einf_php_dateien2.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_dateien2.php">Dateien</a> komplett ausgeben.<br> <br>
<a href="http://www.php-einfach.de/nav_impressum.php">Autor Andavos</a>
<div align="center"><a href="#oben">Nach oben</a></div>
</td>
<td height="100" width="10"></td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#FFE09F" width="160">
<table width="160" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="5"></td>
<td valign="top" class="black2" height="100" width="150">
<br><b><center><img src="grafiken/side_news.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_news.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" href="http://www.php-einfach.de/nav_news.php">News</a>
<br><br>
<b><center><img src="grafiken/side_forum.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_forum.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" href="http://forum.php-einfach.de/">Forum</a>
<br><br>
<b><center><img src="grafiken/side_newsletter.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_newsletter.gif" width="150" height="25" border="0" alt="Newsletter"></center></b>
<form target="_blank" method="post" action="http://www.php-einfach.de/clanletter/save.php">
<br> <br>
<div align="center">&copy; PHP-Einfach.de 2003 - 2007 </div>
</td>
<td height="100" width="5"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>