Folgendes ist mir nach langer Fehlersuche aufgefallen:
Löscht man in PHP ein Element eines numerischen Arrays und verarbeitet man dieses mittels json_encode weiter, so wird das Array als Objekt abgespeichert, scheinbar weil eben ein Index fehlt.
Möchte man trotzdem immer noch ein Array erhalten, dann muss man nochmals mittels array_values die Indices neu erstellen. In Javascript stolpert man über das Problem nicht, bzw. nur wenn
man ein Array-Element mittels delete löscht, was dann ein null als "Loch" zur Folge hat:
Löscht man in PHP ein Element eines numerischen Arrays und verarbeitet man dieses mittels json_encode weiter, so wird das Array als Objekt abgespeichert, scheinbar weil eben ein Index fehlt.
Möchte man trotzdem immer noch ein Array erhalten, dann muss man nochmals mittels array_values die Indices neu erstellen. In Javascript stolpert man über das Problem nicht, bzw. nur wenn
man ein Array-Element mittels delete löscht, was dann ein null als "Loch" zur Folge hat:
PHP-Code:
<?php
$my_array = array( 1, 2, 3, 4, 5 );
var_dump( json_encode( $my_array ) ); echo "<br /><br />"; //string(11) "[1,2,3,4,5]"
unset( $my_array[2] );
var_dump( json_encode( $my_array ) ); echo "<br /><br />"; //string(25) "{"0":1,"1":2,"3":4,"4":5}" <------- Hier ein OBJEKT
$my_array = array_values( $my_array );
var_dump( json_encode( $my_array ) ); echo "<br /><br />"; //string(9) "[1,2,4,5]"
?>
<script type="text/javascript">
var my_array = [ 1, 2, 3, 4, 5 ];
console.log( JSON.stringify( my_array ) ); //[1,2,3,4,5]
my_array.shift();
console.log( JSON.stringify( my_array ) ); //[2,3,4,5]
delete my_array[2];
console.log( JSON.stringify( my_array ) ); //[2,3,null,5] <---- Hier ein Loch
</script>
Kommentar