Hello,
Wie es in der internen Speicherstruktur geregelt wird, geht uns nichts an.
Da geb ich dir recht. Ist nur die Frage, ob es nach außen eine eindeutige, zuverlässige und nachvollziehbare Ordnung gibt, wenn ich beispielsweise $array['neuer_key'] = 123; schreibe?
Als erstes hilft Dir vielleicht dieses kleine Testscript:
<?php ### insert_key.php ###
wo wird ein neues Arrayelement eingefügt?
#------------------------------------------------
function display(&$_liste)
{
echo "<pre>\r\n";
echo htmlspecialchars(print_r($_liste,1));
echo "</pre>\r\n";
}
#------------------------------------------------
function display_types(&$_liste)
{
echo "<pre>\r\n";
foreach($_liste as $key => $value)
{
echo htmlspecialchars($key).": ".gettype($key)."\r\n";
}
echo "</pre>\r\n";
}
#------------------------------------------------
$_liste = array();
$_liste[] = 9;
$_liste[] = 1;
$_liste[] = '01';
display($_liste);
$_liste[1] = 'neuer Datensatz';
display($_liste);
$_liste['ende'] = "Ende im Gelände";
$_liste['anfang'] = "Das ist der Anfang";
$_liste['2'] = "Element '2'";
display($_liste);
$_liste[] = "automatisch hinzu";
$_liste['02'] = "Extra Key '02'";
$_liste['7'] = "Key '7'";
$_liste[5] = "Key 5";
display($_liste);
display_types($_liste);
?>
Und so funktioniert es:
PHP prüft, ob ein Key übergeben wurde.
Wenn keiner übergeben wurde:
stellt es den größten bisher vorhandenen positiven numerischen Key fest, addiert eins und fügt das Element am Ende der Liste ein. Ist der größte numerische Key negativ, wird als nächster "Autokey" 0 verwendet.
Wurde ein Key übergeben:
dieser wird erst nach bestimmten Regeln behandelt: Literale, die Nummern darstellen, werden in ihre numerischen Äquivalente umgewandelt, wenn sie nicht mit einer führenden Null geschreieben werden.
Alphanumerische Keys werden nicht angetastet.
Dann wird die Liste (also bei verzweigten Arrays nur der aktuelle Zweig des Baumes) iteriert und nach dem effektiven Schlüssel gesucht. Ist dieser vorhanden, wird das Element ersetzt, ist dieser nicht vorhanden, wird das Element am Ende eingefügt.
Das ist verbrieftes Verhalten von PHP.
Nachvollziehen kann man das in den Sourcen, die ich mir nun auch nochmal herauskramen werde.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg