Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Arrays
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  

 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 79.000 Beiträgen finden Sie sicher die passende Antwort!  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 



 

Neue Arrayfunktionen seit PHP4




Wie Sie bereits im Abschnitt Arrayfunktionen erfahren haben stellt Ihnen PHP4 eine Reihe neuer Arrayfunktionen zur Verfügung. Wir werden uns einige dieser neue Funktionen näher betrachten und Ihre Funktionsweise vorstellen.


Einsatz von array_unshift()

Mit Hilfe der Funktion array_unshift() haben Sie die Möglichkeit einzelne Elemente am Anfang eines Arrays einzufügen.


Beispiel



<?php
$zahlen 
= array(10,20,30,40,50);
array_unshift($zahlen,"a","b","c");

foreach (
$zahlen as $element) {
    echo 
"$element ";
}
?>




Ausgabe



a b c 10 20 30 40 50




Einsatz von array_push()

Die Funktion array_push() fügt ein oder mehrere Elemente an das Ende eines Arrays an.


Beispiel



<pre>
<?php
$werte 
= array('wagen''punkt''mutter');
$resultat array_push($werte,"mama","papa");
print_r($werte);
echo 
$resultat;
?>
</pre>




Ausgabe



Array
(
    [0] => wagen
    [1] => punkt
    [2] => mutter
    [3] => mama
    [4] => papa
)
5




Einsatz von array_shift()

Die Methode array_shift() entfernt das erste Element eines Arrays.


Beispiel



<pre>
<?php
$werte 
= array('wagen''punkt''mutter');
$resultat array_shift($werte);
print_r($werte);
echo 
$resultat;
?>
</pre>




Ausgabe



Array
(
    [0] => punkt
    [1] => mutter
)
wagen




Einsatz von array_pop()

Die Methode array_pop() entfernt das letzte Element eines Arrays.


Beispiel



<pre>
<?php
$werte 
= array('wagen''punkt''mutter');
$resultat array_pop($werte);
print_r($werte);
echo 
$resultat;
?>
</pre>




Ausgabe



Array
(
    [0] => wagen
    [1] => punkt
)
mutter




Einsatz von array_splice()

Die Funktion array_splice() eignet sich hervorragend um Elemente aus einem Array zu entfernen und diese durch andere Elemente eines Arrays zu ersetzen. Hierbei haben Sie die Möglichkeit an welcher Position im Array dieser Eingriff durchgeführt werden soll.


Beispiel



<?php
$zahlen 
= array(10,20,30,40,50);
$buchstaben = array("a","b","c");

// $resultat = array_splice($array1, postion, anzahl, $array2);
$resultat array_splice($zahlen22,$buchstaben);

foreach (
$zahlen as $element) {
    echo 
"$element ";
}
foreach (
$resultat as $element) {
    echo 
"$element ";
}
?>




Ausgabe



10 20 a b c 50
30 40



Die ersetzten Element werden in dem Array $resultat abgelegt. Für die Angabe der Position eines Array-Elements gilt es immer zu beachten, dass das erste Array-Element die Position 0 besitzt.


Einsatz von array_reverse()

Die Methode array_reverse() kehrt die Reihenfolge der Array-Elemente im Array selbst um. Ist der optionale zweite Parameter preserve_keys TRUE, bleibt die Reihenfolge der Schlüssel erhalten.


Beispiel



<pre>
<?php
$werte 
= array('wagen''punkt''mutter');
$resultat array_reverse($werte);
print_r($resultat);
$resultat array_reverse($werte,true);
print_r($resultat);
?>
</pre>




Ausgabe



Array
(
    [0] => mutter
    [1] => punkt
    [2] => wagen
)
Array
(
    [2] => mutter
    [1] => punkt
    [0] => wagen
)




Einsatz von array_keys()

Wie unter Verwendung der Funktion array_keys() die Schlüssel eines Array einem anderen Array zugewiesen werden können, sehen Sie im folgenden Beispiel:


<pre>
<?php
$array1 
= array ("Zahl" => 100"Farbe" => "rot");
print_r(array_keys ($array1));

$array2 = array ("Wert" => 100"Eintrag" => "rot");
$array2 array_keys($array1);
print_r($array2);
?>




Ausgabe



Array
(
    [0] => Zahl
    [1] => Farbe
)
Array
(
    [0] => Zahl
    [1] => Farbe
)



Ist der optionale Parameter search_value angegeben, werden nur die Schlüssel für diesen Wert zurückgegeben. Andernfalls werden sämtliche Schlüssel zurückgegeben.


Beispiel



<pre>
<?php
$array1 
= array ("Zahl" => 100"Farbe" => "rot");
print_r(array_keys ($array1));

$array2 = array ("Wert" => 100"Eintrag" => "rot");
$array2 array_keys($array1,"rot");
print_r($array2);
?>
</pre>




Ausgabe



Array
(
    [0] => Zahl
    [1] => Farbe
)
Array
(
    [0] => Farbe
)




Einsatz von array_map()
Mit Hilfe von array_map() wird eine Funktion, sog. callback function, auf das vorhandene Array angewandt. Die Anzahl der Parameter, welche die callback-Funktion zu lässt, sollte der Anzahl der an array_map() übergebenen Arrays entsprechen.


Beispiel



<pre>
<?php
function multiplizieren($n) {
    return 
$n*$n;
}

$zahlen = array(12345);
$multzahlen array_map("multiplizieren"$zahlen);
print_r($multzahlen);
print_r($zahlen);
?>
</pre>




Ausgabe



Array
(
    [0] => 1
    [1] => 4
    [2] => 9
    [3] => 16
    [4] => 25
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)



Wie man sieht bleiben die Elemente des Ursprünglichen Arrays erhalten!

Natürlich lassen sich mit array_map() auch mehrere Arrays verarbeiten. Hierzu müssen Sie lediglich berücksichtigen, dass die Anzahl Ihrer Funktionsparameter mit der Anzahl der übergebenen Arrays übereinstimmt.


Beispiel



<pre>
<?php
function verbinden($n$m) {
    return array (
$n => $m);
}

$vok_de = array("auto""bus""motorrad""fahrrad");
$vok_en = array("car""bus""motorcycle""bicycle");

$vokabelheft array_map("verbinden"$vok_de$vok_en);
print_r($vokabelheft);
?>
</pre>




Ausgabe



Array
(
    [0] => Array
        (
            [auto] => car
        )

    [1] => Array
        (
            [bus] => bus
        )

    [2] => Array
        (
            [motorrad] => motorcycle
        )

    [3] => Array
        (
            [fahrrad] => bicycle
        )

)



oder wie wäre es hiermit:



<pre>
<?php
function zeige_vokabeln($n$m) {
    return 
"Vokabeln (Deutsch/Englisch): $n / $m";
}

$vok_de = array("auto""bus""motorrad""fahrrad");
$vok_en = array("car""bus""motorcycle""bicycle");

$vokabelheft array_map("zeige_vokabeln"$vok_de$vok_en);
print_r($vokabelheft);
?>
</pre>




Ausgabe



Array
(
    [0] => Vokabeln (Deutsch/Englisch): auto / car
    [1] => Vokabeln (Deutsch/Englisch): bus / bus
    [2] => Vokabeln (Deutsch/Englisch): motorrad / motorcycle
    [3] => Vokabeln (Deutsch/Englisch): fahrrad / bicycle
)



Bei Verwendung von zwei oder mehr Arrays sollten diese möglichst die gleiche Länge besitzen, da die callback-Funktion parallel auf die entsprechenden Elemente angewandt wird. Haben die Arrays unterschiedliche Längen, wird das kürzeste um leere Elemente erweitert.

Eine weitere interessante Anwendung dieser Funktion ist die Konstruktion eines Arrays bestehend aus Arrays, was mit NULL als Name der callback-Funktion leicht realisiert werden kann.


Beispiel



<pre>
<?php
$vok_de 
= array("auto""bus""motorrad""fahrrad");
$vok_en = array("car""bus""motorcycle""bicycle");
$vok_fr = array("voiture""autobus""motocyclette""bicyclette");

$vokabelheft array_map(null$vok_de$vok_en$vok_fr);
print_r($vokabelheft);
?>
</pre>




Ausgabe



Array
(
    [0] => Array
        (
            [0] => auto
            [1] => car
            [2] => voiture
        )

    [1] => Array
        (
            [0] => bus
            [1] => bus
            [2] => autobus
        )

    [2] => Array
        (
            [0] => motorrad
            [1] => motorcycle
            [2] => motocyclette
        )

    [3] => Array
        (
            [0] => fahrrad
            [1] => bicycle
            [2] => bicyclette
        )
)




Einsatz von array_merge()

Was halten Sie davon zwei oder mehr Arrays miteinander zu verbinden. Hierfür steht Ihnen die Funktion array_merge() zur Verfügung.


Beispiel



<pre>
<?php
$vok_de 
= array("auto""bus""motorrad");
$vok_fr = array(
            
"W1"=>"voiture",
            
"W2"=>"autobus",
            
"W3"=>"motocyclette"
            
);
$vok_en = array("car""bus""motorcycle");

$worte array_merge ($vok_de$vok_fr$vok_en);
print_r($worte);
?>
</pre>




Ausgabe



Array
(
    [0] => auto
    [1] => bus
    [2] => motorrad
    [W1] => voiture
    [W2] => autobus
    [W3] => motocyclette
    [3] => car
    [4] => bus
    [5] => motorcycle
)




Einsatz von array_pad()

Mit Hilfe der Funktion array_pad() kann ein Array um eine beliebige Anzahl von Elementen erweitert werden und entweder am Anfang, oder am Ende mit einem angegebenen Wert, z.B. einem *, aufgefüllt werden.


Beispiel



<?php
$werte 
= array(10,20,30,40,50);
$anfang array_pad($werte,-10,'*');
$ende array_pad($werte,10,'*');
foreach (
$anfang as $element) {
    echo 
"$element ";
}
echo 
"<br>";
foreach (
$ende as $element) {
    echo 
"$element ";
}
?>




Ausgabe



* * * * * 10 20 30 40 50
10 20 30 40 50 * * * * *




Einsatz von array_slice()

Die Funktion array_slice() gibt aus einem Array eine angegebene Anzahl von Elemente, die ab einer Position gefunden werden, an ein zweites Array zurück. Ist die Positionsangabe positiv, beginnt die Sequenz vom Anfang des Arrays, ansonsten vom Ende des Arrays.


Beispiel



<?php
$werte 
= array(10,20,30,40,50);
$vomanfang array_slice($werte,2,2);
$vomende array_slice($werte,-2,2);
foreach (
$vomanfang as $element) {
    echo 
"$element ";
}
echo 
"<br>";
foreach (
$vomende as $element) {
    echo 
"$element ";
}
?>




Ausgabe



30 40
40 50



Sollten Sie folgendes einsetzen:


$resultat1 = array_slice($werte,0,2);
$ resultat1 = array_slice($werte,2);



Erhalten Sie folgende Ausgabe:


10 20 
30 40 50




Einsatz von array_values()

Mit Hilfe der Funktion array_values() können Sie auf einfache Weise sämtliche Werte eines assoziativen Arrays ermitteln.


Beispiel



<?php
$personen 
= array(
            
"P1"=>"Matthias",
            
"P2"=>"Caroline",
            
"PX"=>"Gülten"
            
);
$resultat array_values($personen);
foreach (
$resultat as $element) {
    echo 
"$element ";
}
?>




Ausgabe



Matthias Caroline Gülten




Einsatz von in_array()

Mit Hilfe der Funktion in_array() kann ein Array nach einem bestimmten Wert durchsucht werden. Die Funktion liefert hierbei den Wahrheitswert TRUE zurück, wenn der gesuchte Wert gefunden wurde.


Beispiel



<?php
$personen 
= array(
            
"P1"=>"Matthias",
            
"P2"=>"Caroline",
            
"PX"=>"Gülten"
            
);
if (
in_array("Caroline",$personen)) {
    echo 
"Gefunden";
} else {
    echo 
"Nicht gefunden";
}
?>




Ausgabe



Gefunden




Einsatz von compact()

Die Funktion compact() übergibt die Namen von Variablen als Indizes und deren Werte als zugehörige Elemente in ein Array. So lassen sich auf einfache Weise Variablen in ein assoziatives Array überführen.


Beispiel



<?php
$p1 
"Matthias";
$p2 "Caroline";
$px "Gülten";
$personen compact("p1","p2","px");
foreach (
$personen as $key=>$element) {
    echo 
"$key=>$element<br>";
}
?>




Ausgabe



p1=>Matthias
p2=>Caroline
px=>Gülten




Einsatz von array_combine()

Die Funktion array_combine() erzeugt ein Array mit Hilfe eines Arrays, welches die Schlüssel vorgibt und einem Array, welches die Werte vorgibt. Die Funktion steht Ihnen erst ab PHP 5 zur Verfügung.


Beispiel



<pre>
<?php
$groessen 
= array('klein''mittel''gross');
$werte = array('wagen''punkt''mutter');
$resultat array_combine($groessen$werte);
print_r($resultat);
?>
</pre>




Ausgabe



Array
(
    [klein] => wagen
    [mittel] => punkt
    [gross] => mutter
)



Achtung: Die Anzahl der Elemente beider Arrays muss übereinstimmen, sonst wird FALSE zurückgegeben.



Einsat von array_chunk()
Mit Hilfe der Funktion array_chunk() teilen Sie ein Array in einzelne Arrays auf, welche eine von Ihnen festgelegte Anzahl von Werten besitzen. Am Ende kann auch ein Array mit weniger Werten erzeugt werden. Die Arrays werden als Teile eines mehrdimensionalen Arrays erzeugt, welches numerisch indiziert ist. Sie können PHP dazu zwingen, die originalen Schlüssel des Arrays beizubehalten, indem Sie den optionalen dritten Parameter preserve_keys auf TRUE setzen. Geben Sie FALSE an, werden in jedem erzeugten Array neue numerische Indizes erzeugt, welche bei 0 beginnen, default ist FALSE.


Beispiel



<pre>
<?php
$werte 
= array('wagen''punkt''mutter');
print_r(array_chunk($werte2));
print_r(array_chunk($werte2TRUE));
?>
</pre>




Ausgabe



Array
(
    [0] => Array
        (
            [0] => wagen
            [1] => punkt
        )

    [1] => Array
        (
            [0] => mutter
        )
)

Array
(
    [0] => Array
        (
            [0] => wagen
            [1] => punkt
        )

    [1] => Array
        (
            [2] => mutter
        )
)




Einsatz von array_multisort()

Mit Hilfe von array_multisort() werden mehrere indizierte oder multidimensionale Arrays auf einmal sortiert. Bei der Sortierung werden die Schlüsselassoziationen beibehalten.

Die Struktur der Argumente ist etwas ungewöhnlich, aber flexibel. Das aller erste Argument muss ein Array sein. Die nachfolgenden Argumente können entweder ein Array oder eines der folgenden Sortierflags sein.

Flags für Sortierreihenfolge:
. SORT_ASC - sortiere in aufsteigender Reihenfolge
. SORT_DESC - sortiere in absteigender Reihenfolge

Flags für Sortiertypen:
. SORT_REGULAR - vergleiche Felder normal
. SORT_NUMERIC - vergleiche Felder numerisch
. SORT_STRING - vergleiche Felder als Strings

Hinweis: Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.



Beispiel - sortieren mehrerer Arrays



<pre>
<?php
$werte1 
= array ("10"100100"a");
$werte2 = array (13"2"1);
array_multisort ($werte1$werte2);
print_r($werte1);
print_r($werte2);
?>
</pre>




Ausgabe



Array
(
    [0] => 10
    [1] => a
    [2] => 100
    [3] => 100
)
Array
(
    [0] => 1
    [1] => 1
    [2] => 2
    [3] => 3
)




Beispiel - sortieren eines mehrdimensionalen Arrays



<pre>
<?php
$werte 
= array (
    array (
"10"100100"a"),
    array (
13"2"1)
);
array_multisort ($werte[0], SORT_ASCSORT_STRING,
                 
$werte[1], SORT_DESCSORT_NUMERIC);
print_r($werte);
?>
</pre>




Ausgabe



Array
(
    [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )

    [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )




Einsatz von array_rand()

Mit Hilfe der Funktion array_rand() erhalten Sie einen oder mehrere zufällige Einträge eines Arrays. Die Funktion übernimmt das Array, und ein optionales Argument num_req, welches die gewünschte Anzahl Einträge spezifiziert. Ist num_req nicht angegeben, wird Default auf 1 gesetzt.


Beispiel



<pre>
<?php
$personen 
= array (
            
"Matthias",
            
"Caroline",
            
"Gülten",
            
"Toni",
            
"Saban"
        
);
$rand_keys array_rand ($personen2);
print 
$personen[$rand_keys[0]] . "<br>";
print 
$personen[$rand_keys[1]] . "<br>";;
?>
</pre>




Ausgabe



Caroline
Toni



Sie haben bereits nahezu sämtliche Arrayfunktionen kennen gelernt. Es warten jedoch noch mehr auf Sie! Wie Sie sicher bereits bemerkt haben, sind Arrays ein recht interessantes Thema und wie bereits erwähnt, können sie ihnen die Arbeit an Ihren Programmen vereinfachen, vor allem dort, wo es eine Vielzahl von Daten zu bearbeiten bzw. verwalten gilt. Dies ist besonders heute im Zeitalter der Datenbanken einer der Schwerpunkte!


Einsatz von array_search()

Mit Hilfe der Funktion array_search() erhalten Sie entweder den gefunden Schlüssel oder FALSE zurück. Zusätzlich liefert die Funktion die Position des gesuchten Elements.


Beispiel



<?php
$personen 
= array("Matthias""Caroline""Gülten");
$suchwort "Caroline";
$position array_search($suchwort,$personen);

if (
$position !== false) {
    echo 
"$suchwort liegt auf Position $position";
} else {
    echo 
"Person $suchwort nicht enthalten";
}
?>




Ausgabe



Caroline liegt auf Position 1



Bitte achten Sie darauf den Vergleich mit !== durchzuführen, sollte Ihr gesuchtes Element im Array an der Position 0 gefunden werden, ergibt die if-Anweisung ein logisches FALSE, und dies würde zu einem falschen Resultat führen.


Beispiel



<?php
$personen 
= array("Matthias""Caroline""Gülten");
$suchwort "Matthias";
$position array_search($suchwort,$personen);
if (
$position != false) {
    echo 
"$suchwort liegt auf Position $position";
} else {
    echo 
"Person $suchwort nicht enthalten";
}
?>




Ausgabe



Person Matthias nicht enthalten




Doppelgänger aus einem Array entfernen

Sie haben ein Array und würden gerne Duplikate entfernen, dann sollten Sie sich der Funktion array_unique() zu wenden. Diese Funktion gibt ein neues Array zurück, welches keine doppelten Werte enthält.


Beispiel



<pre>
<?php
$zahlen 
= array(10,1,10,20,30,10,5);
$neuesarray array_unique($zahlen);
print_r($neuesarray);
?>
</pre>




Ausgabe



Array
(
    [0] => 10
    [1] => 1
    [3] => 20
    [4] => 30
    [6] => 5
)



Hinweis: Wie Sie sehen bleiben die Indizes erhalten.



Kleinstes und Grösstes Array-Element ausgeben

Sollten Sie das Kleinste und das Grösste Element eines Array ermitteln wollen, können Sie hierfür die Funktionen min() und max() verwenden. Dies ist vor allem bei Zeittafeln oder kronlogischen Abfolgen äusserst wichtig.


Beispiel - max()



<?php
$personen 
= array("Matthias""Caroline""Gülten");
// Ausgabe - Caroline
echo $kleinstes min($personen);
?>




Beispiel - min()



<?php
$personen 
= array("Matthias""Caroline""Gülten");
// Ausgabe - Matthias
echo $groesstes max($personen);
?>




Array in eine Zeichenkette umwandeln

Sie haben ein Array, welches Sie in eine Zeichenkette (String) umwandeln wollen. Nur die Frage, die sich hierbei stellt lautet: Wie? - Hierfür könnten Sie z.B. eine foreach-Schleife verwenden.


Beispiel



<?php
$personen 
= array("matthias""caroline""gülten");
foreach (
$personen as $element) {
 
$zeichen .= $element;
}
// Ausgabe - matthiascarolinegülten
echo $zeichen;
?>



Wie wir sehen hat dies recht gut funktioniert. Ein Problem gibt es jedoch, wie kommen wir an die einzelnen Bestandteile der Zeichenkette heran. Die aktuelle vorliegende Variablen $zeichen enthält eine zusammenhängende Zeichenkette, in der wir keine Unterscheidungsmöglichkeit haben, wann welcher Teilstring beginnt und wann dieser endet. In diesem Fall könnten wir unsere Schleife optimieren, in dem wir ein Trennzeichen hinzufügen.


Beispiel



<?php
$personen 
= array("matthias""caroline""gülten");
foreach (
$personen as $element) {
 
$zeichen .= ",$element";
}
// Ausgabe - ,matthias,caroline,gülten
echo $zeichen;
// Führendes Trennzeichen entfernen
// Ausgabe - matthias,caroline,gülten
echo $zeichen substr($zeichen,1);
?>



Anhand der Ausgabe ist zu erkennen, dass nach dem Schleifendurchlauf noch eine Bearbeitung der Zeichenkette durch die Stringfunktion substr() statt gefunden hat, um das erste Trennzeichen (,) zu entfernen.

Hinweis: In PHP stehen Ihnen eine Reihe von Stringfunktionen zur Verfügung auf die wir zurückgreifen können. Auf die Stringfunktionen werden wir im nächsten Abschnitt dieses Kapitels eingehen.



Vereiningung-, Schnitt- oder Differenzmengen zweier Arrays

Nehmen wir an Sie hätten zwei Arrays und wollen diese miteinander vergleichen. Hierbei sollen folgende Schwerpunkte gesetzt werden:
. Ermitteln der Vereinigungsmenge, alle Elemente.
. Ermitteln der Schnittmenge, Elemente, die in beiden Arrays vorkommen und nicht nur in einem.
. Ermitteln der Differenzmenge, Elemente, die in einem, aber nicht in beiden vorhanden sind.

Als Vorlage dienen die folgenden beiden Arrays:


$vok_a = array("ein","zwei","drei","vier");
$vok_b = array("ein","zwei","vier");




Ermitteln der Vereinigungsmenge



<pre>
<?php
$vok_a 
= array("ein","zwei","drei","vier");
$vok_b = array("ein","zwei","vier");
$vereinen array_unique(array_merge($vok_a,$vok_b));
print_r($vereinen );
?>
</pre>




Ausgabe



Array
(
    [0] => ein
    [1] => zwei
    [2] => drei
    [3] => vier
)



Um die Vereinigungsmenge zu finden, mischen Sie die beiden Array mit Hilfe der Funktion array_merge() und erhalten damit ein grösseres Array mit sämtlichen Werten. Leider lässt die Funktion jedoch doppelte Werte zu, wenn Sie zwei indizierte Arrays miteinander mischt, daher rufen Sie zusätzlich noch die Funktion array_unique() auf, um diese herauszufiltern.


Ermitteln der Schnittmenge



<pre>
<?php
$vok_a 
= array("ein","zwei","drei","vier");
$vok_b = array("ein","zwei","vier");
$schnitt array_intersect($vok_a,$vok_b);
print_r($schnitt);
?>
</pre>




Ausgabe



Array
(
    [0] => ein
    [1] => zwei
    [3] => vier
)



Bei der Bildung der Schnittmenge ist Ihnen, wie Sie sehen, die Funktion array_intersect() behilflich.


Ermitteln der Differenzmenge



<pre>
<?php
$vok_a 
= array("ein","zwei","drei","vier");
$vok_b = array("ein","zwei","vier");
$differenz array_diff($vok_a,$vok_b);
print_r($differenz );
?>
</pre>




Ausgabe



Array
(
    [2] => drei
)



Die Funktion array_diff() gibt ein Array zurück, welches sämtliche Elemente in $vok_a enthält, die nicht in $vok_b vorkommen.


Elementkombination eines Arrays ermitteln

Sie wollen sämtliche Elementkombinationen eines Arrays ermitteln, die einige oder alle Elemente des Arrays enthalten, sprich die Potenzmenge. Dann haben wir hier eine nützliche Funktion für Sie.



function set_potenz($liste) {
    // Initialisierung durch ein leeres Array
    $resultate = array(array());
    foreach ($liste as $element) {
        foreach($resultate as $kombination) {
            array_push($resultate, array_merge(array($element), $kombination));
        }
    }
    return $resultate;
}



Diese Funktion gibt ein Array aus Arrays zurück, das sämtliche Kombination von Elementen beinhaltet, einschliesslich der leeren Menge.


Beispiel



$werte = array("A","B","C");
$potenzmenge = set_potenz($werte);
print_r($potenzmenge);




Ausgabe



Array
(
    [0] => Array
        (    )

    [1] => Array
        (   [0] => A   )

    [2] => Array
        (   [0] => B  )

    [3] => Array
        (   [0] => B   [1] => A   )

    [4] => Array
        (   [0] => C   )

    [5] => Array
        (   [0] => C   [1] => A   )

    [6] => Array
        (   [0] => C   [1] => B    )

    [7] => Array
        (   [0] => C   [1] => B   [2] => A  )
)



$potenzmenge enthält anschliessend acht Arrays, sprich acht mögliche Kombination. Die erste foreach-Schleife arbeitet sämtliche Elemente des Arrays ab, während die innere foreach-Schleife sämtliche vorhandenen, aus den vorherigen Elementen erzeugten Kombinationen durchläuft. Dies ist auch der schwierige Teil innerhalb der Funktion. Sie müssen genau wissen, wie sich PHP während der Schleifendurchläufe verhält.

Die Funktion array_merge() kombiniert das Element mit den vorherigen Kombinationen. Beachten Sie jedoch, dass das Array $resultate, dem das neue Array mit array_push() hinzugefügt wird, dasjenige ist, das in dem foreach durchlaufen wird. Normalerweise würde dies zu einer Endlosschleife führen, wenn Sie Einträge zu $resultate hinzufügen, in PHP ist dies jedoch nicht der Fall, denn PHP arbeitet mit einer Kopie des ursprünglichen Arrays. Wenn Sie aber eine Ebene höher in die äussere Schleife zurückspringen und das foreach mit dem nächsten $element erneut ausführen, wird es zurückgesetzt. Daher können Sie direkt mit $resultate arbeiten und das Array als Stapelspeicher für Ihre Kombinationen verwenden. Indem Sie alles als Array speichern, erhalten Sie zusätzliche Flexibilität, bei der Bearbeitung der einzelnen Arrays bzw. Kombinationen.

Um die Ergebnisse formatiert auszugeben zwischen den Elementen innerhalb der Kombinationen und Zeilenwechsel zwischen den Kombinationen auszugeben, können Sie folgende Codezeilen einsetzen:


$werte = array("A","B","C");
echo "<table border=1>";
foreach (set_potenz($werte) as $element) {
    print "<tr><td>&nbsp;" . join(" ", $element) . "</td></tr>";
}
echo "</table>";



Wie ware es nur die Kombinationen mit jeweils zwei Elementen auszugeben:


$werte = array("A","B","C");
echo "<table border=1>";
foreach (set_potenz($werte) as $element) {
    if (2 == count($element)) {
    print "<tr><td>&nbsp;" . join(" ", $element) . "</td></tr>";
    }
}
echo "</table>";



Achtung: Der Durchlauf dauert bei einer grossen Menge von Elementen sehr lange. Aus einer Menge mit n Elementen entstehen 2n+1 Mengen. Mit anderen Woren, wenn n um 1 erhöht wird, verdoppelt sich die Anzahl der Elemente.



Permutationen und Arrays

Abschliessend noch ein Beispiel zum Thema Permutation, Sie haben ein Array mit Elementen und wollen sämtliche Möglichkeiten berechnen, wie diese unterschiedlich angeordnet werden können.

$begriffe = array("ich","bin","dort");


Beispiel



<?php
// Permutationen ermitteln (Rekursiv)
function setze_permutation($liste$permliste = array()) {
    if (empty(
$liste)) {
        print 
join(' '$permliste) . "<br>";
    }  else {
        for (
$i count($liste) - 1$i >= 0; --$i) {
             
$neueliste $liste;
             
$neuepermliste $permliste;
             list(
$werte) = array_splice($neueliste$i1);
             
array_unshift($neuepermliste$werte);
             
setze_permutation($neueliste$neuepermliste);
         }
    }
}

// Entspricht - array("ich","bin","dort");
$begriffe split(" ","ich bin dort");
setze_permutation($begriffe);
?>




Ausgabe



ich bin dort
bin ich dort
ich dort bin
dort ich bin
bin dort ich
dort bin ich




 


Sonstige Arrayfunktionen
 




 sponsored by

Host Europe


HighText iBusiness


Host Europe




© 2001-2006 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005-2006 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de