Kurze unset frage

@reima:
Wenn ich das richtig gerafft hab funktioniert deine Lösung nur für arrays mit jeweils einem Zeichen als inhalt. Bei meiner Lösung ist es egal was drin steht! ;-)

So Long
TheVirus
 
@ Reima: ehrlich gesagt versteh ich deinen code nicht ;-), das ist auch der einzige grund, warum ich den von TheVirus deinem vorgezogen habe - was soll ich mit code, den ich garnicht verstehe ? Dann könnt ich ja gleich nen fertiges newsscript nehmen. Da brauch ich ja auch nicht verstehen wies funzt, sondern es einfach nur hochladen :-)

Soviel dazu *g*

Grüße, Morph
 
Was chr(255) ist? Keine Ahnung ;) Aber ein solches Zeichen sollte in keiner normalen Zeichenkette vorkommen, darum hab ich das gewählt. Soll ich meine Lösung vielleicht mal genauer erläutern, damit alle was davon haben? ;)
 
Ahso... Ja gut, aber was wenn es doch vorkommt?! *g*

Ich hab immer beigebracht gekriegt mit dem elementarsten elementen einer Programmiersprache zu arbeiten, deswegen hab ich nicht so recht an funktionen wie implode und explode gewöhnt. Vielleicht wird's mal zeit! :-)

So Long
TheVirus

P.S.: Ja, ich hab's geschnallt! ;-)
 
Jaaaa, bitte erläutere deinen code ;)
Bin nämlich zu doof den zu schnallen - aber ich hoffe du wirst das ändern ;)

Grüße, Morph
 
Ok, ich zerlege dann mal meinen Code, und schreibe ihn in eine Funktion, damit es übersichtlicher wird:
PHP:
function delete_array_element ($delete_id,$array)
{
  unset($array[$delete_id]);
  $tempstring = implode(chr(255), $array);
  $array = explode(chr(255), $tempstring);
  return $array;
}
Also, der Funktion wird nachwievor das Array und der Index des zu löschenden Eintrags übergeben.
Zuerst wird genau dieser Eintrag per unset gelöscht.
Dann wird das Array mit implode in eine Zeichenkette zerlegt. implode macht dabei folgendes: Es nimmt alle Einträge aus dem Array und schreibt sie nacheinander in die Zeichenkette. Als Abgrenzung wird dazwischen jeweils der String gesetzt, den man implode als ersten Parameter übergibt. Kleines Beispiel:
PHP:
$array[0] = "Hans"; $array[1] = "Peter"; $array[2] = "Franz";
echo implode(" | ", $array);
Dieses Script würde dann "Hans | Peter | Franz" ausgeben.
Das praktische bei implode ist aber, dass es leere Einträge im Array gleich weglässt. Hätte man also vor dem implode im obigen Beispiel ein unset($array[1]); gesetzt, wäre die Ausgabe "Hans | Franz" gewesen.
Diesen String, der ja nun alle ursprünglichen Einträge des Arrays außer dem, der gelöscht werden soll, enthält, muss man jetzt nur noch in ein Array zurückverwandeln. Genau das übernimmt das Gegenstück zu implode, nämlich explode. Dieser Funktion übergibt man das Trennzeichen und die Zeichenkette, die in ein Array umgewandelt werden soll.
Und voilá - schon hat man einen Eintrag im Array gelöscht :)

Ich hoffe, dass das einigermaßen verständlich war ;) Wenn nicht - einfach nochmal nachfragen :)


reima
 
@Mathias:

Die Lösung hatte mir eigentlich super gefallen, dumm nur das sie bei meinem 2dimensionalen Array nicht funktioniert hat (wollte eben nur die keys der ersten dimension wieder in eine "normale" reihenfolge nach dem unset bringen).

Aber ich kam zu einer Lösung:
Erstelle ein leeres Array und "merge" es mit meinem "unsortierten":

PHP:
  $mein_array = array(1,2,3,4,5,6);
  unset($mein_array[3]);
  $tmp = array();
  $mein_array = array_merge($tmp, $mein_array);

man kann das temp array aber auch weglassen und das ganze somit auf eine zeile beschränken:
$mein_array = array_merge($mein_array);
Oder um die Anzhal der Pflichparameter einzuhalten:
$mein_array = array_merge($mein_array, NULL);
 
Zurück