Insert und "delete" von Elementen eines Arrays
Thomas Schmieder
- php
Guten Morgen allen Frühaufstehern,
bei der Abarbeitung der Array-Funktionen bin ich in eine Sackgasse geraten. Ich habe ein eindimensionales Array. Ich konnte keine Aussage darüber finden, ob es überhaupt erlaubt ist, auf ein Element des Arrays die unset()-Funktion auszuführen.
$queue = array("Rot","Gelb","Grün","Blau","Schwarz");
unset($queue[3]);
würde also das Element mit dem Inhalt "Blau" aus dem Array löschen und die folgenden aufrücken lassen. Die Versuche zeigten das jedenfalls. Arrays sind also in PHP keine geschlossenen Speicherbereiche, sondern verkettete Listen? Stimmt das?
Nun die nächste Frage:
Wie kann ich das Element mit dem Wert "Blau-Grün" wieder einfügen, und zwar genau an der Stelle, wo ich vorher "Blau" gelöscht habe. Eine array_insert()-Funktion konnte ich nicht finden. Weder in der PHP-Doku noch im Forum konnte ich was darüber finden.
Wenn es keine Funktion gibt, welcher Workaround wäre der günstigste?
Für den Anfang und das Ende der "Kette" gibt es Funktionen (array_pop(), array_push(), array_shift(), array_unshift()) Da kann ich es mir eingentlich nicht vorstellen, dass die Entwickler eine derartig elementare Funktion (array_insert) vergessen haben. Wahrscheinlich kann ich nur nicht richtig suchen (hoffe ich).
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin,
sollte das nicht mit "array_push()" auch gehen...
aber das is wohl nicht ganz das, was du suchst (glaub ich).
Aber vielleicht hilft die foglende Adresse weiter:
http://www.selfphp.info/funktionsreferenz/array_funktionen/index.php
Moin moin,
sollte das nicht mit "array_push()" auch gehen...
aber das is wohl nicht ganz das, was du suchst (glaub ich).
Leider ist das nicht das was ich suche. Ich denke, ich werde da selber eine Funktion schreiben müssen. Wie sowas klassisch gelöst wird, ist mir schon klar. Allerdings wäre es mir lieber, es wäre schon fertig, nicht weil ich zu faul bin, sondern weil eine fertige 3GL->1GL Funktion ca. 6 bis 50 mal schneller läuft, als eine in 4GL gebaute.
Das Problem ist, dass bei einem Insert auch die Indexe neu vergeben werden sollten. Ich bin mir immer noch nicht klar über die innere Struktur der "Arrays" in PHP. Es scheinen aber keine Arrays oder Structs zu sein, sondern verkettete Listen, also absolut dynamische Strukturen. Wo kann cih (möglichst auf Deutsch) mehr über die Innereien von PHP erfahren?
Bei der Gelegenheit mal gefragt, falls es einer liest:
Kann man eigentlich in PHP mittels C eigene Plug-Ins einhängen?
Grüße aus http://www.braunschweig.de
Tom
Moin Tom,
sollte das nicht mit "array_push()" auch gehen...
aber das is wohl nicht ganz das, was du suchst (glaub ich).
Leider ist das nicht das was ich suche. Ich denke, ich werde da selber eine Funktion schreiben müssen. Wie sowas klassisch gelöst wird, ist mir schon klar. Allerdings wäre es mir lieber, es wäre schon fertig, nicht weil ich zu faul bin, sondern weil eine fertige 3GL->1GL Funktion ca. 6 bis 50 mal schneller läuft, als eine in 4GL gebaute.
tja, da geht wohl kein weg an einem workaround vorbei.
explode/implode wird dir wohl ein wenig helfen...
Das Problem ist, dass bei einem Insert auch die Indexe neu vergeben werden sollten. Ich bin mir immer noch nicht klar über die innere Struktur der "Arrays" in PHP. Es scheinen aber keine Arrays oder Structs zu sein, sondern verkettete Listen, also absolut dynamische Strukturen. Wo kann cih (möglichst auf Deutsch) mehr über die Innereien von PHP erfahren?
http://www.php.net/manual/de/language.types.array.php, die PHP-Definition eines Arrays.
Bei der Gelegenheit mal gefragt, falls es einer liest:
Kann man eigentlich in PHP mittels C eigene Plug-Ins einhängen?
jo, ich geh mal davon aus, http://www.php.net/manual/de/zend.php gibt das zumindest vor. (Leider nicht übersetzt)
Fabian