Array Philosophie :-)

Rainer, das stimmt so nicht.


$arr = array(1 => "a", 2 => "b");
echo $arr[1]; //a

Ein Array kann bei einem beliebigen Index anfangen.

Doch, er hat mM nach recht. So wie bei Dir ist es wie ein Hash in Perl.
Manchmal fehlt doch eine strengere Typisierung in PHP.

Tommi

Das sehe ich nicht so, weil Index 0 in meinem Beispiel nicht existiert und PHP einen Fehler dazu auswerfen würde. Ich lasse mich aber bei entsprechender Begründung gerne eines besseren belehren.

Das kommt von der Typensuppe in PHP
Ein Array in PHP ist eigentlich ein key->value paar und damit das, was man in anderen Sprachen als ein Hash bezeichnet. Lässt man den Key weg, beginnt er immer bei „0“. Siehe PHP: Arrays - Manual
und entsprecht Perl Hash
Zum Vergleich die Arraydefinition in Perl: Perl Array

Tommi

Hallo Tommi,

Lässt man den Key weg, beginnt er immer bei „0“.

Ja und gerade hier liegt der Hase im Pfeffer. Man kann den Index- bzw. Keyanfang halt auch erzwingen und das meinte ich damit.
Ohne dieses zu machen beginnt die numerische Zählweise dann bei 0.

Hallo Thomas,

das widerspricht sich ja nicht. Du setzt für den Index einen willkührlichen Wert. Das muss keine Zahl sein. Machen wir doch einen Test:


<?php
$array=array(5 => "erster","zweiter"); 
array_push($array,"dritter");
$array[0]="Null";
$array['Banane']="vorletzter";
array_push($array,"letzter");
foreach ($array as $key=>$value) {
    print "Key:$key -> Value:$value 
";
}
?>

Ergebnis:
Key:5 -> Value:erster
Key:6 -> Value:zweiter
Key:7 -> Value:dritter
Key:0 -> Value:Null
Key:Banane -> Value:vorletzter
Key:8 -> Value:letzter

Wie Du siehst, hat der Index hier nichts mit der tatsächlichen Reihenfolge zu tun. Bei einem reinem Array (automatische Indexverwaltung, ohne Key) ist das aber schon so.

OK, das hat mit dem ursprünglichen Topic nichts mehr zun tun und ist schon mehr philosophisch:rolleyes:. Bei Bedarf den Thread bitte teilen.

Viele Grüße
Tommi

Ja, das uralte thema mit den assoziativen Arrays. Die verwirren mehr als dass sie nützen.

Klar kann ich einen Array Eintrag [12],[1024]und [Banane] nennen genauso wie ich es [1],[2] und [3] nennen kann. Fakt ist, dass im Hintergrund immer ein Index erzeugt wird über den ich das Array unabhängig vom namen ansprechen kann. Dieser Index ist auch der Grund warum Tommys [5] als erstes, nämlich am Index 0 (also der erste Eintrag am Stack), auftaucht.

Da meine aktive PHP-Zeit schon einige Jahre her ist kann ich nicht mehr sagen wie das ging. Aber es ging… Fakt ist, dass in PHP so ziemlich alles erlaubt ist - ob es nun sinn macht oder nicht.

Edit:

Goggle hilft… :smiley:

mit push, pop, shift und unshift kann man indexgesteuert auf die ersten bzw letzten Einträge im Stack zugreifen.

Eine Liste der Values
http://www.php.net/manual/de/function.array-values.php
Eine Liste der Keys
http://www.php.net/manual/de/function.array-keys.php

Und ganz Krass: Das ganze gut schütteln…
http://www.php.net/manual/de/function.array-flip.php :wink:

Toni